从javascript中的数组列表中只获取常见对象

我在我的javascript代码中有几个数组(我也使用knockout js),我想得到一个只包含所有数组的公共对象的数组。

我的代码是这样的:

Array1 = [{a: 1, b: 'something'}, {a: 2, b: 'something1'},{a: 3, b: 'something3'}]; Array2 = [{a: 3, b: 'something3'}, {a: 1, b: 'something'}, {a: 4, b: 'something4'}] Array2 = [{a: 3, b: 'something3'}, {a: 1, b: 'something'}, {a: 5, b: 'something5'}] 

所以,从这个数组我希望所有的共同成为一个单独的数组,所以结果将是这样的:

 Array4 = [{a: 1, b: 'something'}, {a: 3, b: 'something3'}] 

我必须提到Array1,Array2和Array3在另一个数组中,如下所示:

 Array0 = [Array1, Array2, Array3]; 

我希望你能帮助我,谢谢!

例如:

 Array1 = [{a: 1, b: 'something'}, {a: 2, b: 'something1'},{a: 3, b: 'something3'}]; Array2 = [{a: 3, b: 'something3'}, {a: 1, b: 'something'}, {a: 4, b: 'something4'}] Array3 = [{a: 3, b: 'something3'}, {a: 1, b: 'something'}, {a: 5, b: 'something5'}] all = [Array1, Array2, Array3] objects = {} counter = {} all.map(function(ary, n) { ary.map(function(obj) { var key = JSON.stringify(obj); objects[key] = obj; counter[key] = (counter[key] || 0) | (1 << n); }) }) intersection = [] Object.keys(counter).map(function(key) { if(counter[key] == (1 << all.length) - 1) intersection.push(objects[key]); }) console.log(intersection) 

我们的想法是使用JSON表示作为键将所有对象放在哈希表中。

好像你需要编写一些自定义代码来在javascript中进行对象比较(类似于JavaScript中的对象比较 ),然后使用数组交叉算法(如前面提到的一个海报)来查找公共元素。