【问题标题】:Filter one array of elements using another array使用另一个数组过滤一个元素数组
【发布时间】:2013-02-26 07:25:39
【问题描述】:

我对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);} ;});

关于首选方法的任何 cmet 吗?我看到了this answer,但这并不是我想要回答的。

【问题讨论】:

  • 这个似乎确实有效,那么问题是什么?
  • 我是 javascript 新手,只是想看看人们怎么说。
  • 如果它有效并且你想知道是否有更好的东西,你最好在codereview.stackexchange.com。此外,这不是“纯”JavaScript($.each 来自 jQuery 库)。如果您是 JavaScript 新手,请不要一开始就使用 jQuery。首先要习惯这种语言,看看在 JavaScript 中什么是不可能的,然后开始使用库来摆脱限制。

标签: javascript jquery


【解决方案1】:

你可以像这样使用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]

请参阅 MDN 了解 Array.filter 方法(还包含适用于旧版浏览器的 shim)

【讨论】:

  • this.indexOf 之前我没听懂~ 在这里做什么?
  • 使用按位 NOT 运算符有点小技巧:如果 indexOf == -1(未找到),应用 ~-运算符使其成为 0,而在 javascript 中 0 是假的。所以~this.indexOf(a)this.indexOf(a) !== -1 的简写。另见:developer.mozilla.org/en/docs/Web/JavaScript/Reference/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-16
  • 2018-03-07
  • 1970-01-01
  • 1970-01-01
  • 2016-04-26
相关资源
最近更新 更多