如何比較jQuery中的兩個數組,然後從第一個數組中刪除兩個數組中不匹配的項?如何比較兩個數組,並從兩個數組中不匹配的數組中刪除多個項目?
我開始與這個
var listOne = [1,2,3,4,6,7];
var listTwo = [2,5,6];
我想要的結果是這樣才那麼listOne改變。
var listOne = [2,6];
var listTwo = [2,5,6];
如何比較jQuery中的兩個數組,然後從第一個數組中刪除兩個數組中不匹配的項?如何比較兩個數組,並從兩個數組中不匹配的數組中刪除多個項目?
我開始與這個
var listOne = [1,2,3,4,6,7];
var listTwo = [2,5,6];
我想要的結果是這樣才那麼listOne改變。
var listOne = [2,6];
var listTwo = [2,5,6];
對於中等大小的陣列,蠻力解決方案應該可以正常工作。你所描述的看起來好像基本上是從一個數組中刪除其他數組中不存在的元素。因此,穿過第一陣列,並刪除未在第二數組中的所有元素:
function removeElems(src, permitted) {
// traverse array backwards so iteration not affected when we remove current item
for (var i = src.length - 1; i >= 0; i--) {
// if src element not found in permitted array, remove it from src
if (permitted.indexOf(src[i]) === -1) {
src.splice(i, 1);
}
}
}
var listOne = [1,2,3,4,6,7];
var listTwo = [2,5,6];
removeElems(listOne, listTwo);
工作演示:http://jsfiddle.net/jfriend00/1n1fbpgm/
如果listTwo
可能會很長,我可能把所有首先將該數組的元素轉換爲臨時對象,以便檢查項目是否位於數組中,而不僅僅是對象鍵查找而不是線性數組搜索,但是對於中小型數組或者性能不是非常重要的情況複雜性可能不合理。
jQuery只是這樣做的錯誤庫。有一個很好的庫叫做lodash
,它有一個功能difference
,可以完成你所要求的功能。
我會建議使用.grep和.inArray jQuery中,像:
var array1 = [1, 2, 3, 4, 6, 7];
var array2 = [2, 5, 6];
var foo = [];
var foo2 = [];
var result = [];
var i = 0;
jQuery.grep(array2, function(el) {
if (jQuery.inArray(el, array1) == -1) {
foo.push(el);
} else {
foo2.push(el);
}
i++;
});
alert(foo2);
alert(foo);
result = $.merge(foo2, foo)
alert(result);