2013-03-11 129 views
1

我有點更熟悉Python元素的一個陣列,那麼什麼是JavaScript的等效:過濾器使用另一個陣列

In [25]: listA = [1,2,3,4,5,1,1] 
In [26]: listB = [1,2] 
In [27]: intersect = [element for element in listA if element in listB] 
In [28]: intersect 

Out[28]: [1, 2, 1, 1] 

這是最接近我可以得到:

var arrA = [1,1,3,4,5,5,6]; 
var arrB = [1,5]; 
var arrC = []; 
$.each(arrA, function(i,d){ if (arrB.indexOf(d)> -1){arrC.push(d);} ;}); 

對首選方法有任何意見?我看到了this answer,但它不完全是我想要回答的。

+1

這一個似乎工作,所以問題是什麼? – 2013-03-11 07:23:01

+0

我是新來的JavaScript,只是想我會看到人們不得不說的。 – gus 2013-03-11 07:35:01

+0

如果它有效,並且想知道是否有更好的東西,那麼最好在http://codereview.stackexchange.com。此外,這不是「純粹的」JavaScript('$ .each'來自jQuery庫)。如果您是JavaScript新手,請先不要使用jQuery。首先習慣這種語言,看看JavaScript中不可能的東西,然後開始使用庫來擺脫限制。 – Zeta 2013-03-11 07:39:36

回答

8

您可以使用Array.filter這樣的:

var aa = [1,2,3,4,5,1,1] 
    ,ab = [1,2] 
    ,ac = aa.filter(function(a){return ~this.indexOf(a);},ab); 
//=> ac is now [1,2,1,1] 

或者作爲擴展Array.prototype

Array.prototype.intersect = function(arr){ 
return this.filter(function(a){return ~this.indexOf(a);},arr); 
} 
// usage 
[1,2,3,4,5,1,1].intersect([1,2]); //=> [1,2,1,1] 

MDNArray.filter方法(也含有墊片舊版本瀏覽器)

+0

我在'this.indexOf'之前沒有看到'〜'在這裏做什麼? – 2017-01-24 23:24:28

+1

它使用位NOT運營商一招比特:如果'indexOf' == -1(沒有找到),應用了〜 - 運算符使它'0',並在JavaScript'0'是falsy。因此'〜this.indexOf(a)'是'this.indexOf(a)!== -1'的縮寫。另見:https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators#Bitwise_NOT – KooiInc 2017-01-25 07:28:40