为了账号安全,请及时绑定邮箱和手机立即绑定

js 数组去重问题

js 数组去重问题

qq_小盛开_0 2017-05-04 09:48:24
var a=[1,2,3,3,3,3,3,2,2,]; Array.prototype.unique1 = function() { var n = []; //一个新的临时数组 for(var i = 0; i < this.length; i++) //遍历当前数组 { if (n.indexOf(this[i]) == -1) n.push(this[i]); //--------------------- 这句话怎么理解------------------------------------- } return n; } console.log(a.unique1());
查看完整描述

8 回答

已采纳
?
依韵_宵音

TA贡献4条经验 获得超1个赞

首先你需要知道,在`Array.prototype`上扩展的方法,默认情况下运行时,`this`指的是实例对象,比如运行`a.unique1()`时,函数内部的`this`就是指a。


其次 你需要了解indexOf方法,对数组来说:indexOf(item) 来说就是判断 返回item在数组中的下标,如果不在,则返回`-1`


这样就清楚了吧

if (n.indexOf(this[i]) == -1) {
    // 若n这个临时数组中不含有this[i] , 就把this[i] 添加到新数组中。 
    // 记住this是在运行时才决定的,你运行a.unique1() this就指代a,this[i]也就是a[i]
    n.push(this[i]);
}


查看完整回答
1 反对 回复 2017-05-04
  • 欧罗巴皇
    欧罗巴皇
    你这个每次从头去查一遍有 效率就低了不少了
  • 依韵_宵音
    依韵_宵音
    又不是我写的,这是他问什么意思啊。首先要理解,其次才是效率问题。
?
慕粉4084382

TA贡献1条经验 获得超1个赞

可以试试ES6 set()方法    var newArr=new Set(arr);

查看完整回答
1 反对 回复 2017-05-04
?
欧罗巴皇

TA贡献5条经验 获得超1个赞

  function unique2(arr) {
            var result = [], hash = {};
            for (var i = 0, elem; (elem = arr[i]) != null; i++) {
                if (!hash[elem]) {
                    result.push(elem);
                    hash[elem] = true;
                }
            }
            console.log(hash)
            return result;
        }


查看完整回答
反对 回复 2017-05-05
?
落叶1111

TA贡献57条经验 获得超9个赞

filterArray()自己领悟

查看完整回答
反对 回复 2017-05-04
?
清风流光

TA贡献8条经验 获得超0个赞

新数组内没有找到a[i],就执行后面的推入语句

查看完整回答
反对 回复 2017-05-04
?
侠客中的王者

TA贡献2条经验 获得超1个赞

es5 中添加了数组中查找某个元素是否存在的方法。indexOf()和lastIndexOf()

查看完整回答
反对 回复 2017-05-04
?
啊啊啊啊123

TA贡献25条经验 获得超8个赞

在空数组n里遍历查找 数组a里的每一项,if判断成功说明n里没有a对应项的数据,push到n里,这方法写的有点意思啊

查看完整回答
反对 回复 2017-05-04
?
tom的猫

TA贡献65条经验 获得超35个赞

如果在数组n中没有找到则添加进数组n中

indexOf 是查找一个值在某个字符串或者集合(数组)中的下标,如果能找到则返回对应下标,如果找不到则返回 -1

查看完整回答
反对 回复 2017-05-04
  • 8 回答
  • 2 关注
  • 2456 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信