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我已经相应地更新了我的问题。