2

我的javascript代码中有几个数组(我也在使用淘汰赛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];

我希望你能帮助我解决这个问题,谢谢!

4

2 回答 2

5

例如:

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 表示作为键。

于 2013-04-01T13:15:25.380 回答
0

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

于 2013-04-01T12:58:01.257 回答