📌  相关文章
📜  如何使用 JavaScript 从对象数组中删除重复项?(1)

📅  最后修改于: 2023-12-03 14:51:54.678000             🧑  作者: Mango

如何使用 JavaScript 从对象数组中删除重复项?

在开发中,我们经常使用对象数组来存储和操作数据。但是在某些情况下,我们需要从这些对象数组中删除重复项以确保数据的唯一性。本文将介绍如何使用 JavaScript 从对象数组中删除重复项。

1. 使用 Set 对象

JavaScript 中的 Set 对象是一种有序集合,它通过比较对象的引用来确定是否为重复项。如果我们希望通过对象的属性来比较重复项,我们需要先将对象转换为字符串再进行比较。

let arr = [{name: 'apple'}, {name: 'banana'}, {name: 'apple'}];

let set = new Set(arr.map(JSON.stringify));

arr = Array.from(set).map(JSON.parse);

console.log(arr);
// Output: [{name: 'apple'}, {name: 'banana'}]

上面的代码首先通过 map() 方法将对象数组中的每个元素都转换为字符串,然后将这些字符串存储到 Set 对象中。由于 Set 对象只存储唯一的值,因此重复项将自动被删除。最后,我们再将这些字符串转换回原始的对象并存储到一个新数组中。

2. 使用 filter() 方法

另一种从对象数组中删除重复项的方法是使用 filter() 方法。

let arr = [{name: 'apple'}, {name: 'banana'}, {name: 'apple'}];

arr = arr.filter((obj, index, self) => 
  index === self.findIndex((t) => (
    t.name === obj.name
  ))
);

console.log(arr);
// Output: [{name: 'apple'}, {name: 'banana'}]

这里使用了 filter() 和 findIndex() 方法。filter() 方法遍历数组并返回一个新数组,该数组包含符合条件的元素。findIndex() 方法返回数组中满足提供的测试函数条件的第一个元素的索引。我们可以使用这两个方法来实现从对象数组中删除重复项的操作。

3. 使用 reduce() 方法

还有一种更高效的方式是使用 reduce() 方法,因为它只需要遍历数组一次。

let arr = [{name: 'apple'}, {name: 'banana'}, {name: 'apple'}];

arr = arr.reduce((prev, curr) => {
  if (!prev.find((t) => t.name === curr.name)) {
    prev.push(curr);
  }
  return prev;
}, []);

console.log(arr);
// Output: [{name: 'apple'}, {name: 'banana'}]

上面的代码使用 reduce() 方法遍历数组并将不重复的元素存储到一个新数组中。如果当前元素已经存在于新数组中,我们就跳过它。最后,我们返回这个新数组。

总结

以上就是使用 JavaScript 从对象数组中删除重复项的三种方法:使用 Set 对象、使用 filter() 方法、使用 reduce() 方法。我们可以根据实际需要选择其中一种或多种方法来实现我们的要求。