1

I'm a bit more familiar with python, so what is the javascript equivalent of:

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]

This is the closest I can get:

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

Any comments on preferred methods? I saw this answer, but it was not exactly what I wanted to answer.

3
  • 1
    this one does seem to work, so what the question is? Commented Mar 11, 2013 at 7:23
  • I'm new to javascript, just thought I'd see what people have to say. Commented Mar 11, 2013 at 7:35
  • If it works and you want to know whether there's something better, you're better off at codereview.stackexchange.com. Also, this isn't "pure" JavaScript ($.each is from the jQuery library). If you're new to JavaScript don't use jQuery at first. First get used to the language and see what isn't possible in JavaScript, then start to use a library to get rid of the limitations. Commented Mar 11, 2013 at 7:39

1 Answer 1

8

You could use Array.filter like this:

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]

Or as extension for 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]

See MDN for the Array.filter method (also contains a shim for older browsers)

Sign up to request clarification or add additional context in comments.

2 Comments

I didn't catch what ~ do here before this.indexOf?
It's a bit of a trick using the bitwise NOT operator: if indexOf == -1 (nothing found), applying the ~-operator makes it 0 and in javascript 0 is falsy . So ~this.indexOf(a) is shorthand for this.indexOf(a) !== -1. See also: developer.mozilla.org/en/docs/Web/JavaScript/Reference/…

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.