david2tdw / blog

学习记录
1 stars 1 forks source link

[JS] JS数组对象去重 #109

Open david2tdw opened 4 years ago

david2tdw commented 4 years ago

方法1:利用对象访问属性的方法,判断对象中是否存在key + value

var arr = [{
      key: '01',
      value: '乐乐'
   }, {
      key: '02',
      value: '博博'
   }, {
      key: '03',
      value: '淘淘'
   },{
      key: '04',
      value: '哈哈'
   },{
      key: '01',
      value: '乐乐'
   }];

   var result = [];
   var obj = {};
   for(var i =0; i<arr.length; i++){
      if(obj[arr[i].key] !== (arr[i].key + arr[i].value)){
         result.push(arr[i]);
         obj[arr[i].key] = arr[i].key + arr[i].value;
      }
   }
   console.log(result); // [{key: "01", value: "乐乐"},{key: "02", value: "博博"},{key: "03", value: "淘淘"},{key: "04", value: "哈哈"}]
david2tdw commented 4 years ago

方法2:利用reduce方法遍历数组, reduce第一个参数是遍历需要执行的函数,第二个参数是item的初始值。 初始值放一个空数组为存储过滤后的结果。

var arr = [
  {
    key: '01',
    value: '乐乐'
  },
  {
    key: '02',
    value: '博博'
  },
  {
    key: '03',
    value: '淘淘'
  },
  {
    key: '04',
    value: '哈哈'
  },
  {
    key: '01',
    value: '乐乐'
  }
]

var obj = {}
arr = arr.reduce(function(item, next) {
  obj[next.key] === next.key + next.value ? '' : (obj[next.key] = next.key + next.value) && item.push(next)
  return item
}, [])
console.log(arr) // [{key: "01", value: "乐乐"},{key: "02", value: "博博"},{key: "03", value: "淘淘"},{key: "04", value: "哈哈"}]
david2tdw commented 4 years ago

简化版: 只判断数组中对象的id是否相同。

var arr = [
  {
    key: '01',
    value: '乐乐'
  },
  {
    key: '02',
    value: '博博'
  },
  {
    key: '03',
    value: '淘淘'
  },
  {
    key: '04',
    value: '哈哈'
  },
  {
    key: '01',
    value: '乐乐'
  }
]

//  方法1:利用对象访问属性的方法,判断对象中是否存在key
var result = []
var obj = {}
for (var i = 0; i < arr.length; i++) {
  if (!obj[arr[i].key]) {
    result.push(arr[i])
    obj[arr[i].key] = true
  }
}
console.log(result) // [{key: "01", value: "乐乐"},{key: "02", value: "博博"},{key: "03", value: "淘淘"},{key: "04", value: "哈哈"}]

//  方法2:利用reduce方法遍历数组,reduce第一个参数是遍历需要执行的函数,第二个参数是item的初始值
var obj = {}
arr = arr.reduce(function(item, next) {
  obj[next.key] ? '' : (obj[next.key] = true && item.push(next))
  return item
}, [])
console.log(arr) // [{key: "01", value: "乐乐"},{key: "02", value: "博博"},{key: "03", value: "淘淘"},{key: "04", value: "哈哈"}]

js中数组对象去重的方法