我有项目的功能如下: 我有一个二维数组,然后应删除特定的一维数组。 二维数组是:
// ID,姓名,年龄,分数。学生的ID是唯一的。
var arr1=[["1","aaa","20","90"],
["2","bbb","21","80"],
["3","ccc","22","70"],
["4","ddd","23","60"],
];
var arr2=["3","ccc","22","70"];
我想得到一个二维数组。结果如下:
result=arr1=[["1","aaa","20","90"],
["2","bbb","21","80"],
["4","ddd","23","60"],
];
我写了一些代码,但是我得到了一个逻辑错误.jsfiddle的URL是:Edit fiddle
非常感谢。
答案 0 :(得分:2)
所以你想删除arr1
中的数组,其ID与arr2
中的ID相对应?如果这是问题,只需写下:
for(var i=0;i<arr1.length;i++){
if(arr1[i][0] === arr2[0])
arr1.splice(i, 1);
}
答案 1 :(得分:0)
由于您在演示中使用了Underscore:
var result = _.filter(arr1, function (el) {
return el[0] != arr2[0];
});
答案 2 :(得分:0)
您可以使用Array的过滤功能。请参阅下面的代码,未经测试但希望有所帮助。
这是为了修复您当前的代码。更好的解决方案是将二维数组转换为字典,如MarcoCI建议的那样。它会对你有所帮助。
var arr1 = [
["1", "aaa", "20", "90"],
["2", "bbb", "21", "80"],
["3", "ccc", "22", "70"],
["4", "ddd", "23", "60"], ];
var arr2 = ["3", "ccc", "22", "70"];
// filters comparing all elements
// use filterArray(sourceArray, array1, array2, array3 ...)
function filterArray(arr) {
var args = arguments;
return arr.filter(function (x) {
for (var i = 1; i < args.length; i++) {
var tarr = args[i];
for (var j = 0; j < tarr.length && j < x.length; j++) {
if (tarr[j] != x[j]) {
return true;
}
}
}
return false;
});
}
console.log(filterArray(arr1, arr2));
// filters comparing 0th element
// use filterArrayID(sourceArray, array1, array2, array3 ...)
function filterArrayID(arr) {
var args = arguments;
return arr.filter(function (x) {
for (var i = 1; i < args.length; i++) {
var tarr = args[i];
if (tarr[0] != x[0]) {
return true;
}
}
return false;
});
}
console.log(filterArrayID(arr1, arr2));