javascript - 在数组数组中查找缺失的数组

标签 javascript arrays

我需要在“数组的数组”中找到缺失的数组。我首先在下面(在 StackOverflow 上)找到了这个函数:

function findDeselectedItem(CurrentArray, PreviousArray) {

   var CurrentArrSize = CurrentArray.length;
   var PreviousArrSize = PreviousArray.length;
   var deselectedItem = [];

   // loop through previous array
   for(var j = 0; j < PreviousArrSize; j++) {

      // look for same thing in new array
      if (CurrentArray.indexOf(PreviousArray[j]) == -1)
         deselectedItem.push(PreviousArray[j]);

   }

   return deselectedItem;
}

如果你做了这样的事情,这工作得很好:

oldarray = ["hi", "ho", "hey"];
newarray = ["hi", "hey"];

使用 findDeselectedItem(newarray, oldarray) 将返回 ["ho"]。

但是,我的内容是这样的:

oldarray = [["James", 17, 1], ["Olivia", 16, 0], ["Liam", 18, 1]];
newarray = [["Olivia", 16, 0], ["James", 17, 1]];

我如何调整上面的函数,以便它返回包含“Liam”的缺失数组。

谢谢

最佳答案

我会用名字作为键值进行散列。这将使查找丢失的内容变得微不足道并且非常快。然后,您可以优化该方法,而不是每次都重建散列,而是仅在确实需要时才重建。

var oldArray = [["James", 17, 1], ["Olivia", 16, 0], ["Liam", 18, 1]];
var newArray = [["Olivia", 16, 0], ["James", 17, 1]];

function findDeselectedItems(oldArray, newArray)
{
   var results = [];

   var hash = {};
   for (var i=0; i<newArray.length; i++) {          
      hash[newArray[i].join(',')] = true;
   }

   for (var i=0; i<oldArray.length; i++) {
      if (!hash[oldArray[i].join(',')]) {
        results.push(oldArray[i]);
      }   
   }

   return results;
}   

关于javascript - 在数组数组中查找缺失的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17897451/

相关文章:

javascript - 如何从数组中分离信息?

sql - 排序查询数据库

javascript - 具有主值和次值的数组排序

javascript - javascript 的引号中断 ctags

javascript - 使用 getElementById 更改样式背景属性

c# - 如何最佳地找到极大数组中的 5 个最大元素

python - 通过索引列表使用不同数组中的值,使用 += 更改 numpy 数组中的特定值

Javascript:递归函数为现有值返回未定义

javascript - 508 ADA Compliant - 跳过内容的方式

javascript - 如何在焦点输入上显示隐藏 div