如何从二维数组中删除特定的一维数组?

时间:2014-02-26 15:14:26

标签: javascript multidimensional-array

我有项目的功能如下: 我有一个二维数组,然后应删除特定的一维数组。 二维数组是:

// 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

非常感谢。

3 个答案:

答案 0 :(得分:2)

所以你想删除arr1中的数组,其ID与arr2中的ID相对应?如果这是问题,只需写下:

for(var i=0;i<arr1.length;i++){
    if(arr1[i][0] === arr2[0])
        arr1.splice(i, 1);
}

http://jsfiddle.net/2pYT2/3/

答案 1 :(得分:0)

由于您在演示中使用了Underscore:

var result = _.filter(arr1, function (el) {
    return el[0] != arr2[0];
});

更新了演示:http://jsfiddle.net/2pYT2/4/

答案 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));

小提琴:http://jsfiddle.net/2pYT2/5/