js数组去重

80次阅读

共计 563 个字符,预计需要花费 2 分钟才能阅读完成。

// 方法一:时间复杂度为 O(n)。通过创建空的 obj 对象,遍历数组的时候查找 obj 对象中是否有值,没有的话以该元素创建一个属性并赋值,同时遍历的数组元素 push 进 res 数组

Array.prototype.unique = function () {let obj = {};
    let res = [];
    for(let i = 0;i < this.length;i++){if(!obj[this[i]]){obj[this[i]] = {};   //json[this[i]] 可以随意赋值
            res.push(this[i]);
        }
    }
    return res;
}
console.log([1,1,2,2,3].unique())   //[1,2,3]

// 方法二:将 res 数组中上一个元素与原数组中的每个元素进行比较,将不同于上一个元素的元素放入 res 数组中

Array.prototype.unique = function () {console.log(this)
    let res = [this[0]];
     for(let i = 0;i < this.length;i++){if(this[i] != res[res.length-1]){res.push(this[i]);
         }
     }
    return res;
}
 console.log([1,1,2,2,3].sort().unique())

我的微信公众号:天字一等

正文完
 0

JS数组去重

81次阅读

共计 1201 个字符,预计需要花费 4 分钟才能阅读完成。

简单数组去重:
{
const a = [1, 3, 4, 1, 5, 2, 6, 7, 8, 3]
const b = a.filter((item, index, self) => self.indexOf(item) === index)
console.log(b) //[1, 3, 4, 5, 2, 6, 7, 8]
}
实例 1 根据 indexOf 去重,indexOf 的好处就是返回的是首次出现的位置,这样后面即使出现的值一样,也只能返回第一次出现的索引,当然这个只适用于简单的数组
对象数组去重:
const objArr = [{
name: ‘ 名称 1 ’
},{
name: ‘ 名称 2 ’
},{
name: ‘ 名称 3 ’
},{
name: ‘ 名称 1 ’
},{
name: ‘ 名称 2 ’
}]

const obj = {}
const newObjArr = []
for(let i = 0; i < objArr.length; i++){
if(!obj[objArr[i].name]){
newObjArr.push(objArr[i]);
obj[objArr[i].name] = true
}
}

console.log(newObjArr)
结果为:
[{
name: ‘ 名称 1 ’
},{
name: ‘ 名称 2 ’
},{
name: ‘ 名称 3 ’
}]
还可以用 reduce 来处理,如下:
const objArr = [{
name: ‘ 名称 1 ’
},{
name: ‘ 名称 2 ’
},{
name: ‘ 名称 3 ’
},{
name: ‘ 名称 1 ’
},{
name: ‘ 名称 2 ’
}]
const obj = {}
const newObjArr = objArr.reduce((prev, curr)=>{
obj[curr.name] ? true : obj[curr.name] = true && prev.push(curr);
return prev
}, [])
console.log(newObjArr)
结果为:
[{
name: ‘ 名称 1 ’
},{
name: ‘ 名称 2 ’
},{
name: ‘ 名称 3 ’
}]
两个数组之间去重:
var arr3 = [{
id: 1,
name: ‘lily’
}, {
id: 2,
name: ‘hz’
}, {
id: 3,
name: ‘123’
}, {
id: 4,
name: ‘321’
}, {
id: 5,
name: ‘aa’
}]

var other = [{
id: 1,
name: ‘lily’
}, {
id: 2,
name: ‘hz’
}]

isOther = (x, arr) =>{
for(var i = 0;i<arr.length;i++){
if(x === arr[i].id){
return true;
}
}

return false;
}

console.log(arr3.filter((item)=>!isOther(item.id, other)));
结果为:
[{
id: 3,
name: ‘123’
}, {
id: 4,
name: ‘321’
}, {
id: 5,
name: ‘aa’
}]
上面例子中,在数组 arr3 去除掉跟数组 isOther 中相同的元素,把不存在在 isOther 数组中的元素筛选出来

正文完
 0