Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/447.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 - Fatal编程技术网

Javascript 相交并合并两个对象数组

Javascript 相交并合并两个对象数组,javascript,Javascript,我有两个阵列: var odd = [ { name : "1", extraProp1 : "propValue1" }, { name : "3", extraProp1 : "propValue2"} ]; var even = [ { name : "1", extraProp2 : "prop1" }, { name : "

我有两个阵列:

var odd = [
    { name : "1", extraProp1 : "propValue1" },
    { name : "3",  extraProp1 : "propValue2"}
];

var even = [
    { name : "1", extraProp2 : "prop1" },
    { name : "2", extraProp2 : "prop2"},
    { name : "4", extraProp2 : "prop3" }
]; 
如何创建一个新数组,其结果如下:

var result = [{ name : "1", extraProp1 : "propValue1",  extraProp2 : "prop1"}];
需要根据name属性添加它们

编辑:这是参考 我还研究了:

然而,当我这样做的时候

function merge(a, b, prop){
    var reduced =  a.filter( aitem =>  b.find ( bitem => aitem[prop] === bitem[prop]) );
  return reduced;
}
console.log( "ES6", merge(odd, even, "name") );

它只从一个数组中获取属性。

我所能看到的最有效的方法(尽管可能没有利用JS预定义函数)是用
名称
值作为键组成一个字典

您可以遍历第一个数组并填充字典。然后,您可以迭代第二个数组,如果它不包含
名称
,则将每个元素添加到字典中,如果包含,则合并对象

例如:

var奇数=[
{name:“1”,extrop1:“propValue1”},
{名称:“3”,extraProp1:“propValue2”}
];
var偶数=[
{名称:“1”,extraProp2:“prop1”},
{名称:“2”,extraProp2:“prop2”},
{名称:“4”,extraProp2:“prop3”}
]; 
var combinedDictionary={}
for(让obj为奇数){
组合字典[obj.name]=obj;
}
for(让obj为偶数){
组合字典[obj.name]={
…(组合字典[对象名]| |{}),
…obj
};
}
var result=Object.keys(combinedDictionary.map)(key=>combinedDictionary[key]);

控制台日志(结果)事实上,在您的尝试中,您正确地过滤了
a
,但是您没有合并两个对象的代码

我还将使用
映射
进行比嵌套调用
过滤器
更快的查找:

函数合并(a、b、prop){
设map=newmap(b.map(o=>[o[prop],o]);
返回a.reduce((acc,o)=>{
让match=map.get(o[prop]);
返回匹配?acc.concat({…o,…match}):acc;
}, []);
}
var奇数=[
{name:“1”,extrop1:“propValue1”},
{名称:“3”,extraProp1:“propValue2”}
];
var偶数=[
{名称:“1”,extraProp2:“prop1”},
{名称:“2”,extraProp2:“prop2”},
{名称:“4”,extraProp2:“prop3”}
]; 

log(合并(奇数、偶数,“名称”)
那么,您尝试的代码中有哪些需要帮助?@Bergi我已经相应地更新了我的问题。