[英]Merge two array of objects and added a new Key & Value
I have 2 arrays based on the "Form_Name" key value to merge an array with added new key&value "isChecked". 我有2个基于“ Form_Name”键值的数组,以合并具有新键和值“ isChecked”的数组。
Array One 阵列一
arrayOne = [
{id: 11, Form_Name: "form name One", isChecked: true}
{id: 11, Form_Name: "form name Two", isChecked: true}];
Array Two 阵列二
arrayTwo = [
{Form_Name: "form name One", Form_AddDate: "2019-05-15T11:03:18.05"}
{Form_Name: "form name Two", Form_AddDate: "2019-05-15T11:03:18.05"}
{Form_Name: "form name Three", Form_AddDate: "2019-05-15T11:03:18.05"}
{Form_Name: "form name Four", Form_AddDate: "2019-05-15T11:03:18.05"}];
Expected merged array 预期合并数组
mergedArray = [
{Form_Name: "form name One", Form_AddDate: "2019-05-15T11:03:18.05", isChecked: true}
{Form_Name: "form name Two", Form_AddDate: "2019-05-15T11:03:18.05", isChecked: true}
{Form_Name: "form name Three", Form_AddDate: "2019-05-15T11:03:18.05", isChecked: false}
{Form_Name: "form name Four", Form_AddDate: "2019-05-15T11:03:18.05", isChecked: false}]
I tried like below 我尝试如下
const mergedArray = [];
for (let i = 0; i < arrayTwo.length; i++) {
mergedArray.push({
...arrayTwo[i],
...(arrayOne.find((itmInner) => itmInner.Form_Name === arrayTwo[i].Form_Name))}
);
}
console.log('merged array result', mergedArray);
const hasChecked = new Set(arrayOne.map(it => it.Form_Name));
const result = arrayTwo.map(it => ({ ...it, isChecked: hasChecked.has(it.Form_Name) }));
By creating a set of checked form names, you can easily map over the second array of objects, and add a isChecked
property. 通过创建一组已检查的表单名称,您可以轻松地映射到第二个对象数组,并添加isChecked
属性。
let arrayOne = [{ id: 11, Form_Name: "form name One", isChecked: true }, { id: 11, Form_Name: "form name Two", isChecked: true }]; let arrayTwo = [{ Form_Name: "form name One", Form_AddDate: "2019-05-15T11:03:18.05" }, { Form_Name: "form name Two", Form_AddDate: "2019-05-15T11:03:18.05" }, { Form_Name: "form name Three", Form_AddDate: "2019-05-15T11:03:18.05" }, { Form_Name: "form name Four", Form_AddDate: "2019-05-15T11:03:18.05" }]; let arrayOneObj = arrayOne.reduce((result, item) => { result[item.Form_Name] = item.isChecked return result; }, {}) const result = arrayTwo.map((item) => ({ ...item, isChecked: !!arrayOneObj[item.Form_Name] })) console.log(result);
Try this if the form_name is in the same order in both arrays. 如果form_name在两个数组中的顺序相同,请尝试此操作。
arrayOne = [
{id: 11, Form_Name: "form name One", isChecked: true},
{id: 11, Form_Name: "form name Two", isChecked: true},
{id: 11, Form_Name: "form name Three", isChecked: true},
{id: 11, Form_Name: "form name Four", isChecked: true}]
arrayTwo = [
{Form_Name: "form name One", Form_AddDate: "2019-05-15T11:03:18.05"},
{Form_Name: "form name Two", Form_AddDate: "2019-05-15T11:03:18.05"},
{Form_Name: "form name Three", Form_AddDate: "2019-05-15T11:03:18.05"},
{Form_Name: "form name Four", Form_AddDate: "2019-05-15T11:03:18.05"}]
let mergedArray = []
arrayTwo.forEach( (item,i) => { mergedArray.push(Object.assign({}, item, arrayOne[i]))} )
console.log(mergedArray)
Hope it helps ! 希望能帮助到你 !
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.