如何解决合并两个数组并保留其他字段数组对象之间的差异
我找不到合并两个数组并保留其他字段(数组对象之间的区别)的干净方法。
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.find在另一个数组中获取相同的字段。
- 我们使用destructering 合并两个对象
- 然后我们过滤掉不再使用的字段
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 举报,一经查实,本站将立刻删除。