簡體   English   中英

從一個多維數組中移除另一個多維數組中的元素

[英]Removing the elements from one multidimensional array from another multidimensional array

我發現很難直面我認為很簡單的任務。 此刻我的腦袋剛剛炸開,我有最后期限。 :(

我需要從一個多維數組中獲取所有元素數組,然后從另一個多維數組中刪除它們。

Arr1 = [["Tom", "161"], ["Dick", "29"], ["Harry", "46"], ["Mike", "72"], ["Sally", "11"]];

Arr2 = [["Harry", "46"], ["Mike", "72"], ["Tom", "161"]];

因此,在這種情況下,我想從Arr2中獲取所有元素數組,並將其從Arr1中刪除,以便隨后Arr1看起來像這樣:

Arr1 = [["Dick", "29"], ["Sally", "11"]];

那有意義嗎?

EDITx2:等一下,不,請忽略我,我很傻。

假設數組中始終有兩個元素,並且將“唯一”元素定義為名稱數字的組合,則可以執行以下操作:

function(array1, array2) {
    var seen = {};
    var returnedArray = [];

    for(var i = 0; i < array2.length; i++) {
        var elements = array2[i];
        seen[elements[0] + elements[1]] = true;

        //an alternative to the above is to do
        //seen[JSON.stringify(elements)] = true;
    }

    for(var i = 0; i < array1.length; i++) {
        var elements = array1[i];
        if(!seen[elements[0] + elements[1]]) {
            returnedArray.push(elements);
        }

        //an alternative to the above is to do
        //if(!seen[JSON.stringify(elements)]) {
        //   ...
        //}
        //
        //if you took the alternate approach in the first loop
    }

    return returnedArray;
}

如果需要快速組合,請使用嵌套循環對Arr1中的每個元素遍歷Arr2的元素,並對每個元素進行比較。 您可以查看此問題的答案,以獲取有關比較內部數組的提示:

如何用JavaScript檢查兩個數組是否相等?

由於所有的都是字符串,您可以通過字符串方法和鏈接來發揮創意。 可能不是最好的性能,但有些棘手,但是它可以工作:

var arr = [["Tom", "161"], ["Dick", "29"], ["Harry", "46"], ["Mike", "72"], ["Sally", "11"]];
var remove = [["Harry", "46"], ["Mike", "72"], ["Tom", "161"]];

var result = arr
  .join('|')
  .replace(RegExp(remove.join('|'),'g'),'')
  .match(/[^|]+/g)
  .map(function(s){ return s.split(',') });

console.log(result); //=> [["Dick","29"],["Sally","11"]]

您甚至可以嘗試使用JSON 在任何情況下,我都不會推薦這樣做,只是為了好玩。

演示: http //jsbin.com/obokuy/1/edit

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM