微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

合并两个数组并保留其他字段数组对象之间的差异

如何解决合并两个数组并保留其他字段数组对象之间的差异

我找不到合并两个数组并保留其他字段(数组对象之间的区别)的干净方法

  const currentForm = [
    {
      name: "username",type: "string",info: "enter username",value: "test"
    },{
      name: "password",type: "aes",info: "enter password",value: "pass"
    }
  ];

  const newForm = [
    {
      name: "username",info: "enter username"
    }
  ];

合并后,我需要这个数组:

  const currentForm = [
    {
      name: "username",value: "test"
    }
  ];

我通过一个复杂的函数实现了这一点,但我认为可以使用es6语法轻松实现。

工作示例:https://codesandbox.io/s/merged-arrays-18m1t?file=/src/App.js

解决方法

如果name是每个对象的唯一键,我们可以执行以下操作。

  • 首先,我们将具有相同名称的所有字段合并为 array.map()
  • 然后我们过滤掉不再使用的字段 Array.filter()
    • 要查看新数组中是否存在对象,我们使用array.some(),它返回一个布尔值,作为结果,我们可以将其传递回filter方法。

const currentForm = [
  {
    name: "username",type: "string",info: "enter username",value: "test"
  },{
    name: "password",type: "aes",info: "enter password",value: "pass"
  }
];

const newForm = [
  {
    name: "username",info: "enter username"
  }
];

const mergeForms = (firstForm,secondForm) => {
  // Merge all fields
  const mergedFields = firstForm.map((obj) => ({...obj,...secondForm.find(({ name }) => obj.name === name)}));
  // Filter out fields we no longer have
  const fieldsToKeep = mergedFields.filter((obj) => newForm.some(({ name }) => obj.name === name));
  // Return fields
  return fieldsToKeep;
};

// Merge 2 forms
const mergedForm = mergeForms(currentForm,newForm);

console.log(mergedForm);

,

我不清楚您要达到什么目标。

如果要合并第一个数组的每个对象与另一个数组中相同位置的对象:

currentForm.map((obj,i) => Object.assign({},obj,newForm[i]));

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。