2014-09-29 177 views

回答

2

對於中等大小的陣列,蠻力解決方案應該可以正常工作。你所描述的看起來好像基本上是從一個數組中刪除其他數組中不存在的元素。因此,穿過第一陣列,並刪除未在第二數組中的所有元素:

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可能會很長,我可能把所有首先將該數組的元素轉換爲臨時對象,以便檢查項目是否位於數組中,而不僅僅是對象鍵查找而不是線性數組搜索,但是對於中小型數組或者性能不是非常重要的情況複雜性可能不合理。

0

jQuery只是這樣做的錯誤庫。有一個很好的庫叫做lodash,它有一個功能difference,可以完成你所要求的功能。

2

我會建議使用.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);

http://jsfiddle.net/csdtesting/u9xES/644/