如何在javascript中删除数组元素?

时间:2013-11-29 10:15:33

标签: javascript

我有两个像这样的数组,

arr1 = ['20', 'annL', 'annT', '25', 'annL', 'annT', '44', 'annL', 'annT']

arr2 = ['2013-11-29','50','annL','annT', '20','annL','annT', '25','annL','annT', '44','annL','annT', '96','annL','annT', '26','annL','annT', '10','annL','annT']

我想从arr2中删除arr1元素。

我用过,

array.splice() 

但无法解决问题

请帮助我,

谢谢。

4 个答案:

答案 0 :(得分:3)

使用过滤器

Array.prototype.difference = function(arr) {
    return this.filter(function(i) {return (arr.indexOf(i) == -1);});
}

<强>用法

arr2.difference(arr1);

[1,2,3,4].difference([1,2])
// => [3,4] 

<强>旁注

我认为它在咖啡脚本中看起来很漂亮:

 Array::difference = (arr) ->
   @filter (i) ->
     arr.indexOf(i) is -1

答案 1 :(得分:0)

这有帮助吗?

for (var i in arr1) {
    var elemPos = arr2.indexOf(arr1[i]);
    while (-1 !== elemPos) {
        arr2.splice(elemPos, 1);
        elemPos = arr2.indexOf(arr1[i]);
    }
}

答案 2 :(得分:0)

以下difference函数来自此库:array.sets.js

该库提供了6个基本集合操作。

Array.prototype.difference = function(a) {
        var temp = [];
        var keys = {};
        for (var i = 0; i < this.length; i++) {
                keys[this[i]] = 1;
        }
        for (var i = 0; i < a.length; i++) {
                if (keys[a[i]] != undefined) {
                        keys[a[i]] = 2;
                }
        }
        for (var key in keys) {
                if (keys[key] == 1) {
                        temp.push(key);
                }
        }
        return temp;
};

arr1 = ['20', 'annL', 'annT', '25', 'annL', 'annT', '44', 'annL', 'annT'];

arr2 = ['2013-11-29','50','annL','annT', '20','annL','annT', '25','annL','annT', '44','annL','annT', '96','annL','annT', '26','annL','annT', '10','annL','annT'];

console.log(arr2.difference(arr1));

输出:

["2013-11-29", "50", "96", "26", "10"]

答案 3 :(得分:0)

这是另一种解决方案:

arr1.forEach(
     function(item){ 
         var itemIndex = arr2.indexOf(item);
         if(itemIndex>=0)
           arr2.splice(itemIndex,1);
     }
);

关于您的评论

如果arr2是一个混合数组,其值为:

var arr2 = [['2013-11-29','50','annL','annT'], ['20','annL','annT', '25','annL'],
'annT', '44','annL','annT', '96','annL','annT', '26','annL','annT', '10','annL','annT'];

传递算法arr2值将是:

[['2013-11-29','50','annL','annT'], ['20','annL','annT', '25','annL'],
 "96", "26", "annT", "10", "annL", "annT"]

如果你想要的是删除每个arr2 2d数组值中出现的arr1元素:

var arr2 = [['2013-11-29','50','annL','annT'], ['20','annL','annT', '25','annL'],
['annT', '44','annL','annT', '96','annL','annT'], ['26','annL','annT', '10','annL','annT']];

arr2.forEach(
    function(arrayItem){ 
        arr1.forEach(function(item){ 
            if(arrayItem.indexOf(item)>=0)
                arrayItem.splice(arrayItem.indexOf(item),1);
        });
    });

//arr2 will produce: [['2013-11-29','50'], [], ['96'], ['26','10']]

请注意,如果arr2不是真正的二维数组,它将产生错误。