繁体   English   中英

如何删除JavaScript中的数组元素?

[英]How to remove array elements in 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() 

但无法解决问题

请帮我,

谢谢。

使用过滤器

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

这有帮助吗?

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

如果使用此库,则以下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"]

这是另一种解决方案:

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不是真正的2d数组,它将产生错误。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM