search

Home  >  Q&A  >  body text

JavaScript数组中包含数组如何去重?

例如说[1,2,3,[1,1,2],[3,2],2]这样的应该如何去掉重复的数字,谢谢

PHPzPHPz2894 days ago553

reply all(4)I'll reply

  • 巴扎黑

    巴扎黑2017-04-10 14:25:34

    var arr = [1,2,3,[1,1,2],[3,2],2];
    
    var result = arr.reduce(function(v, i) {
        if (Array.isArray(i)) {
            i.forEach(function(item) {
                if (v.indexOf(item) < 0) {
                    v.push(item);
                }
            });
        } else {   
            if (v.indexOf(i) < 0) {
                v.push(i);
            }
        }
        return v;
    }, []);
    
    console.log(result);
    

    reply
    0
  • 大家讲道理

    大家讲道理2017-04-10 14:25:34

    Array.prototype.unique = function(){
        var res = [];
        var json = {};
        for(var i = 0; i < this.length; i++){
            if(!json[this[i]]){
                res.push(this[i]);
                json[this[i]] = 1;
            }
        }
        return res;
    }
    
    var arr = [112,1,23,'absc'];
    alert(arr.unique());
    

    1.创建一个新的数组存放结果
    2.创建一个空对象
    3.for循环时,每次取出一个元素与对象进行对比,如果这个元素不重复,则把它存放到结果数组中,同时把这个元素的内容作为对象的一个属性,并赋值为1,存入到第2步建立的对象中。

    来自

    reply
    0
  • 大家讲道理

    大家讲道理2017-04-10 14:25:34

    下面的做法局限性很大, Just for fan.

    arr.toString().split(",").sort().reduce(function(v,i){if (v.indexOf(i) < 0) {v.push(i);} return v; }, []).map(function(element){return parseInt(element,10);});
    

    reply
    0
  • ringa_lee

    ringa_lee2017-04-10 14:25:34

    一维数组的话,简洁的写法应该是这样的

    myArray.filter(function(elem, pos,self){return self.indexOf(elem)== pos;})
    

    reply
    0
  • Cancelreply