JavaScript 中删除数组中重复项的 3 种方法
让我们检查一下,很多次(或很少)需要删除数组中给出的重复元素,我不知道......这可能是因为你必须从超级打印一个列表,删除一个在表格中重复记录的学生,无数的事情,所以让我们看看一些方法来做到这一点:
1)使用集合
使用 Set(),将创建一个唯一值的实例,隐式使用该实例将删除重复项。
因此我们可以利用这个实例,然后我们必须将该实例转换为一个新的数组,就是这样:
let chars = ['A', 'B', 'A', 'C', 'B'];
let uniqueChars = [...new Set(chars)];
console.log(uniqueChars);
输出:
['A', 'B', 'C']
2)使用indexOf()和filter()方法
indexOf() 方法返回数组中元素第一次出现的索引:
let chars = ['A', 'B', 'A', 'C', 'B'];
chars.indexOf('B');
输出:
1
重复元素是索引与其 indexOf() 值不同的元素:
let chars = ['A', 'B', 'A', 'C', 'B'];
chars.forEach((element, index) => {
console.log(`${element} - ${index} - ${chars.indexOf(element)}`);
});
输出:
A - 0 - 0
B - 1 - 1
A - 2 - 0
C - 3 - 3
B - 4 - 1
为了消除重复,filter() 方法仅用于包含索引与其 indexOf 值匹配的元素,因为我们知道 filer 方法根据对其执行的操作返回一个新数组:
let chars = ['A', 'B', 'A', 'C', 'B'];
let uniqueChars = chars.filter((element, index) => {
return chars.indexOf(element) === index;
});
console.log(uniqueChars);
输出:
['A', 'B', 'C']
如果我们碰巧需要重复项,我们可以稍微修改一下我们的函数,只需改变我们的规则即可:
let chars = ['A', 'B', 'A', 'C', 'B'];
let dupChars = chars.filter((element, index) => {
return chars.indexOf(element) !== index;
});
console.log(dupChars);
输出:
['A', 'B']
3)使用 includes() 和 forEach() 方法
如果元素在数组中,则 include() 函数返回 true,否则返回 false。
下面的示例迭代数组的元素,并仅将尚不存在的元素添加到新数组中:
let chars = ['A', 'B', 'A', 'C', 'B'];
let uniqueChars = [];
chars.forEach((element) => {
if (!uniqueChars.includes(element)) {
uniqueChars.push(element);
}
});
console.log(uniqueChars);
输出:
['A', 'B', 'C']
基本上,我们有多种方法可以解决此类问题,因此,不要再陷入困境,您可以使用任何一种您喜欢的方法。