JavaScript中数组去重的三种方法

64 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第25天,点击查看活动详情

让我们检查一下,很多次(或很少)需要删除数组中给出的重复元素,删除一个重复他的记录的以删除重复学生为一种形式,也有很多种事物,所以让我们看看一些方法来做到这一点:

1.使用Set

使用 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.使用 include() 和 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']  

结论

在本文中我们已经演示了如何使用这三种方法去进行数组去重,相信你看到了这里,应该已经学会了。

感谢阅读