简体   繁体   English

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

[英]How to delete a specific one-dimensional array from two-dimensional array?

I have project's function as follow: I have a two-dimensional array, then should delete the specific one-dimensional array. 我的项目功能如下:我有一个二维数组,然后应删除特定的一维数组。 The two-dimensional array is: 二维数组为:

//ID,Name,Age,Score.Student's ID is unique. // ID,Name,Age,Score。学生的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"];

I want to get the a two-dimensional array.The result as follow: 我想得到一个二维数组。结果如下:

result=arr1=[["1","aaa","20","90"],
      ["2","bbb","21","80"],
      ["4","ddd","23","60"],
     ];

I write some codes,but I get a logic error.The URL of jsfiddle is: Edit fiddle 我写了一些代码,但遇到逻辑错误。jsfiddle的URL是: 编辑小提琴

Thank you very much. 非常感谢你。

So you want to delete the array in arr1 with the ID correspoding to the ID in arr2 ? 因此,您要删除arr1中ID对应于arr2 ID的数组吗? If thats the problem simply write: 如果那是问题,只需写:

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

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

Since you are using Underscore in your demo: 由于您在演示中使用Underscore:

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

Updated demo: http://jsfiddle.net/2pYT2/4/ 更新的演示: http : //jsfiddle.net/2pYT2/4/

You can use filter function of Array. 您可以使用数组的过滤功能。 See the code below, not tested but hope it helps. 请参阅下面的代码,未经测试,但希望能对您有所帮助。

This is to fix your current code. 这是为了修复您当前的代码。 Better is solution is to convert two dimensional array to dictionary as MarcoCI suggested. 更好的解决方案是按照MarcoCI的建议将二维数组转换为字典。 It will help to you a lot. 这将对您有很大帮助。

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

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

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

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