JavaScript数组去重(利用对象属性特点)

JavaScript(利用对象属性特点)

1.注意

此方法去重会出现一些小问题(下面列举目前发现的问题)

  • 如果数组中存在多个不同对象时,如 [{},{},{name:“a”},{name:“a”}], 去重后只剩下最前面的对象了[{}]
  • 如果数组中存在空值empty,如[,],去重后为[undefined],遍历时会把empty空值识别为undefined

2.对象属性特点

一个对象,属性名不可能重复

3.去重

把数组元素当作对象属性名实现去重

  • 在数组原型上写一个去重方法(方便只让数组使用)
Array.prototype.noRepeat = function () {
    const temp = {};
    const arr = [];
    const len = this.length;
    for (let i = 0; i < len; i++) {
    	//!temp[this[i]]==true-->temp[this[i]]==false-->当前对象中没有此属性名
        if (!temp[this[i]]) {
            temp[this[i]] = "hahaha";
            arr.push(this[i]);
        }
    }
    return arr;
}
  • 测试
const student = {
    name: "genius",
    age: 18
}
const array = [null, null, {}, {}, true, true, false, false, undefined, undefined, , , 1, 1, student, student, 'a', 'a'];
//打印出原来的数组
console.log(array);
//[null, null, {…}, {…}, true, true, false, false, undefined, undefined, empty × 2, 1, 1, {…}, {…}, "a", "a"]
//打印出去重后的新数组
const newArr = array.noRepeat();
console.log(newArr);
// [null, {…}, true, false, undefined, 1, "a"]

我们可以看见此方法对对象的处理以及对empty空值的处理会存在问题,其他问题尚未发现,欢迎各位小伙伴帮忙解决问题!

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值