简体   繁体   English

合并两个对象数组并添加新的键和值

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM