我有两个像这样的数组,
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()
但无法解决问题
请帮助我,
谢谢。
答案 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不是真正的二维数组,它将产生错误。