[英]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.