Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
仅从javascript中的数组列表中获取公共对象_Javascript_Jquery_Arrays - Fatal编程技术网

仅从javascript中的数组列表中获取公共对象

仅从javascript中的数组列表中获取公共对象,javascript,jquery,arrays,Javascript,Jquery,Arrays,我的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 =

我的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'}]
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'}]

Array2 = [{a: 3, b: 'something3'}, {a: 1, b: 'something'}, {a: 5, b: 'something5'}]
Array4 = [{a: 1, b: 'something'}, {a: 3, b: 'something3'}]
Array0 = [Array1, Array2, Array3];
我必须指出,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'}]

Array2 = [{a: 3, b: 'something3'}, {a: 1, b: 'something'}, {a: 5, b: 'something5'}]
Array4 = [{a: 1, b: 'something'}, {a: 3, b: 'something3'}]
Array0 = [Array1, Array2, Array3];

我希望你能帮我,谢谢

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

例如:

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)
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'}]
全部=[Array1,Array2,Array3]
对象={}
计数器={}
all.map(函数(ari,n){
ary.map(功能(obj){
var key=JSON.stringify(obj);
对象[键]=对象;

计数器[键]=(计数器[键]| | | 0)|(1你说的是“所有人的共同点”,但是你在结果中包含了一些东西3,而只有2个数组。这是一个打字错误,或者如果它在2个数组中,你想添加一些东西吗?看看JS中的reduce函数,如果你努力的话,应该可以完成这项工作,但是下划线会使它更容易。哦..对不起,这是一个错误..我现在正在更正,谢谢你!你是int吗是否需要对对象进行深入比较?
{a:1,b:“something”}
每次都是相同的引用对象,还是具有相同属性的单独对象?可能重复?(但这不是jQuery解决方案--我不知道jQuery是否能使这项工作比POJS更容易)小心不要在太大的数据集合上运行它。@naugtur:为什么?据我所知,性能是线性的。我想我担心的是从对象生成大字符串,然后将它们用作多个集合中的键。结果可能会占用大量内存,但我没有测试它-我的不好。无论如何,这与时间复杂性无关。@thg435 I如果我的数组中有30多个项目,
交叉点
数组抛出一个空数组。这太棒了,非常感谢!我四处寻找一个简单的解决方案,非常感谢!