我需要在“数组的数组”中找到缺失的数组。我首先在下面(在 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/