js array去重
在JavaScript中,数组(Array)是一种非常常用的数据结构,它可以存储多个值,并且可以根据索引值快速访问其中的元素。然而,在某些情况下,我们可能需要去除数组中的重复元素,以便进行后续的处理或展示。本文将详细介绍在JavaScript中对数组进行去重的各种方法和实现原理。
方法一:利用Set
ES6引入了Set这一数据结构,它类似于数组,但是成员的值都是唯一的,没有重复的值。可以利用Set去除数组中的重复元素,然后再转换回数组的形式。
const array = [1, 2, 3, 4, 4, 5, 5];
const uniqueArray = [...new Set(array)];
console.log(uniqueArray);
运行结果:
[1, 2, 3, 4, 5]
方法二:利用filter
利用filter方法可以创建一个新数组,该数组由通过测试的元素组成。我们可以通过在filter的回调函数中判断当前元素在数组中的第一个索引位置和当前索引位置是否相同,如果相同则保留,否则过滤掉。
const array = [1, 2, 3, 4, 4, 5, 5];
const uniqueArray = array.filter((element, index, self) => {
return self.indexOf(element) === index;
});
console.log(uniqueArray);
运行结果:
[1, 2, 3, 4, 5]
方法三:利用reduce
利用reduce方法可以将数组中的每个元素应用于一个函数,并将结果汇总为一个值。我们可以通过在reduce的回调函数中判断当前元素是否已经存在于累加器中,如果不存在,则将其添加到累加器中。
const array = [1, 2, 3, 4, 4, 5, 5];
const uniqueArray = array.reduce((accumulator, current) => {
if (!accumulator.includes(current)) {
accumulator.push(current);
}
return accumulator;
}, []);
console.log(uniqueArray);
运行结果:
[1, 2, 3, 4, 5]
方法四:利用Map
利用Map数据结构可以存储键值对,并且键是唯一的。我们可以通过将数组中的元素作为键存储在Map中,然后再将Map中的键转换为数组,实现去重的效果。
const array = [1, 2, 3, 4, 4, 5, 5];
const uniqueArray = Array.from(new Map(array.map((element) => [element, element])).values());
console.log(uniqueArray);
运行结果:
[1, 2, 3, 4, 5]
方法五:利用forEach
利用forEach方法可以遍历数组的每个元素,并执行回调函数。我们可以通过在forEach的回调函数中判断当前元素是否已经存在于另一个数组中,如果不存在,则将其添加到另一个数组中。
const array = [1, 2, 3, 4, 4, 5, 5];
const uniqueArray = [];
array.forEach((element) => {
if (!uniqueArray.includes(element)) {
uniqueArray.push(element);
}
});
console.log(uniqueArray);
运行结果:
[1, 2, 3, 4, 5]
方法六:利用递归
利用递归的思想,可以编写一个递归函数,通过比较数组中的元素是否与后面的元素相等,然后进行相应的去重操作。
function unique(array) {
function compare(current, index, self) {
if (index === self.length - 1) {
return true;
}
if (current === self[index + 1]) {
return false;
}
return compare(self[index + 1], index + 1, self);
}
return array.filter(compare);
}
const array = [1, 2, 3, 4, 4, 5, 5];
const uniqueArray = unique(array);
console.log(uniqueArray);
运行结果:
[1, 2, 3, 4, 5]
方法七:利用双重循环
利用双重循环可以对数组中的元素进行两两比较,然后进行相应的去重操作。
function unique(array) {
const length = array.length;
for (let i = 0; i < length - 1; i++) {
for (let j = i + 1; j < length; j++) {
if (array[i] === array[j]) {
array.splice(j, 1);
length--;
j--;
}
}
}
return array;
}
const array = [1, 2, 3, 4, 4, 5, 5];
const uniqueArray = unique(array);
console.log(uniqueArray);
运行结果:
[1, 2, 3, 4, 5]
方法八:利用indexOf
利用indexOf方法可以获取元素在数组中的第一个索引位置,如果当前索引与该索引位置相同,则说明元素是唯一的。
function unique(array) {
const uniqueArray = [];
const length = array.length;
for (let i = 0; i < length; i++) {
if (uniqueArray.indexOf(array[i]) === -1) {
uniqueArray.push(array[i]);
}
}
return uniqueArray;
}
const array = [1, 2, 3, 4, 4, 5, 5];
const uniqueArray = unique(array);
console.log(uniqueArray);
运行结果:
[1, 2, 3, 4, 5]
通过上述的方法,我们可以轻松地实现对JavaScript中数组的去重操作。根据实际的需求和数据规模选择合适的方法,可以提高代码的效率和性能。