分享以下几种数组去重的方法:
1.使用空数组遍历待去重的数组,如果待去重的数组索引第一次出现的数字不在新数组中,则添加到新数组里面
2.稍微复杂一点的
var arr = [1, 1, 34, 56, 34, 56, 123, 1, 34];
var newarr = []; //去重后新的数组
for (var i = 0, len1 = arr.length; i < len1; i++) {
var flag = 1; //标记
//arr的一项和所有的newarr里面的数组项进行比较
for (var j = 0, len2 = newarr.length; j < len2; j++) {
if (arr[i] === newarr[j]) {
//满足条件,新数组里面存在。不需要的
flag = 2;
break;
}
}
//如果到这里flag=1,不满足上面的if判断,新数组不存在,需要的
if (flag === 1) {
newarr.push(arr[i]);
}
}
console.log(arr);
console.log(newarr);
3.filter配合indexOf
4.splice
var arr = [1, 1, 34, 56, 34, 56, 123, 1, 34];
for (var i = 0, len = arr.length; i < len; i++) {
for (var j = i+1, len = arr.length; j < len; j++) {
if (arr[i] === arr[j]) {
arr.splice(j, 1);//当前位置删除一个,改变原数组
j--;//索引归位,splice会改变原数组。
}
}
}
5,还可以使用正则
var arr = [1, 1, 34, 56, 34, 56, 123, 1, 34];
for (var i = 0; i < arr.length; i++) {
for (var j = i + 1; j < arr.length; j++) {
if (arr[i] === arr[j]) {
arr[j] = '*';
}
}
}
var newarr = arr.join('#').replace(/\*/g, '').replace(/\#+/g, ',').split(',').filter(function (v) {
return +v;
});
var newarr1 = [];
for (let value of newarr) {
newarr1.push(+value)
}
console.log(arr);
console.log(newarr1);
6.使用 Set
let arr = [1, 5, 2, 3, 4, 2, 3, 1, 3, 4]
const unique = (array) => {
return [...new Set(array)]
//或者 return Array.from(new Set(array))
}
unique(arr) //[1, 5, 2, 3, 4]
缺点:API太新,旧浏览器不支持;无法去掉重复的{}空对象。
7.最后再来一个JS中数组对象去重的方法
var arr = [
{
key: "01",
value: "乐乐",
},
{
key: "02",
value: "博博",
},
{
key: "03",
value: "淘淘",
},
{
key: "04",
value: "哈哈",
},
{
key: "01",
value: "乐乐1",
},
{
key: "02",
value: "博博",
},
{
key: "03",
value: "淘淘",
},
{
key: "04",
value: "哈哈",
},
];
// 转字符串去重
let newarr = [];
let obj = {};
for (let json of arr) {
newarr.push(JSON.stringify(json));
}
console.log(
[...new Set(newarr)].map((value) => {
return JSON.parse(value);
})
);
function test() {
let map = new Map();
for (let value of arr) {
if (!map.has(value.key)) {
map.set(value.key, value);
}
}
arr = [...map.values()];
console.log(arr);
}
test();