js数组对象去重根据every()

68 阅读1分钟
  • 现在有这样一个数组
let arr = [
	{ a:1, b:1, c:1 },
	{ a:1, b:2, c:1 },
	{ a:1, b:1, c:2 },
	{ a:1, b:1, c:2 },
]
  • 我们现在要去除相同的一项
function deweight(arr){
  let de_arr= []
  arr.forEach(i => {
   let isTrue = de_arr.every((j)=>{
      for (const key in j) {
        return i[key]!==j[key]
      }
    })
    isTrue ? de_arr.push(i) : ''
  });
  return de_arr
}
deweight(arr) 
// [{ a:1, b:1, c:1 },{ a:1, b:2, c:1 },{ a:1, b:1, c:2 },]
  • 或者根据'b'进行去重
function deweight(arr,key){
  let de_arr= []
  arr.forEach(i => {
   let isTrue = de_arr.every((j)=>{
        return i[key]!==j[key]
    })
    isTrue ? de_arr.push(i) : ''
  });
  return de_arr
}
deweight(arr,'b') 
// [{ a:1, b:1, c:1 },{ a:1, b:2, c:1 }]
  • Array.every()的用法
  • every 方法为数组中的每个元素执行一次 callback 函数,直到它找到一个会使 callback 返回 falsy 的元素。如果发现了一个这样的元素,every 方法将会立即返回 false。否则,callback 为每一个元素返回 true,every 就会返回 true。callback 只会为那些已经被赋值的索引调用。不会为那些被删除或从未被赋值的索引调用。 callback 在被调用时可传入三个参数:元素值,元素的索引,原数组。
const isBelowThreshold = (currentValue) => currentValue < 40;

const array1 = [1, 30, 39, 29, 10, 13];

console.log(array1.every(isBelowThreshold));
// expected output: true