在javascript中按名称值合并两个数组


var arr1 = [{name: "lang", age: "23"},{name:"shen", "age" : "18"}];
var arr2 = [{name : "shen Fajarda", status: "married"}];

如何按名称合并这两个数组,尽管arr1中的名称为shen,而arr2中的名称为shen Fajarda。

这是我需要的输出,
var arr3 = [{name: "lang", age: "23"},{name:"shen", age : "18",status:"married"}];

映射到第一个数组中的每一个元素,如果可以找到,则与第二个数组中的对应元素合并。

const arr1 = [{name: "lang", age: "23"},{name: "shen", "age": "18"}];
const arr2 = [{name: "shen Fajarda", status: "married"}];
const merged = arr1.map(person => {
const name = person.name.toLowerCase();
const otherRecord = arr2.find(({name: candidateName}) => candidateName.toLowerCase().includes(name));
return otherRecord ? {...person, ...otherRecord} : person;
});

如果第二个数组包含相同的名称,可以在reduce回调检查中使用find

let arr1 = [{
name: "lang",
age: "23"
}, {
name: "shen",
"age": "18"
}];
let arr2 = [{
name: "shen Fajarda",
status: "married"
}];

const mergedVal = arr1.reduce((acc, curr) => {
const name = curr.name.toLowerCase();
const isNameAvl = arr2.find(elem => elem.name.toLowerCase().includes(name));
isNameAvl && acc.push({ ...curr,
...isNameAvl
});
!isNameAvl && acc.push(curr);
return acc;
}, []);
console.log(mergedVal)

最新更新