2014-02-26 168 views
0

我有項目的功能如下: 我有一個二維數組,然後應該刪除特定的一維數組。 二維數組爲:如何從二維數組中刪除特定的一維數組?

//ID,Name,Age,Score.Student的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"]; 

我想要得到的二維array.The結果如下:

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

我寫一些代碼,但我得到一個邏輯的jsfiddle的和error.The網址是:Edit fiddle

非常感謝。

+0

根據您的演示,您使用下劃線,對不對? – Pavlo

+2

只是一個提示:如果您的ID是唯一的,使用字典/對象:它會更快找到/添加/刪除新項目。 – MarcoL

+0

@MarcoCI我的同事也建議我使用該對象,然後實現這個對象的添加或刪除方法。我會盡力做到這一點。謝謝 –

回答

0

因爲您在您的演示使用下劃線:

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

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

2

因此,您想要刪除arr1中的ID,並將ID對應到ID爲arr2?如果這就是問題簡單地寫:

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

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

+0

其實在他的回答他比較字符串,而不是數組 –

+1

我不比較數組,我比較字符串,即數組中的元素。 – kamilkp

+0

是的,我誤解了。儘管如此,我認爲'arr1 [i]'中的所有元素都需要匹配'arr2'來移除它,但也許我也誤解了這個問題。 –

0

您可以使用數組的過濾功能。看到下面的代碼,未經測試,但希望它有幫助。

這是爲了解決您當前的問題。更好的解決辦法是按照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/