Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 合并两个数组并保留其他字段(数组对象之间的差异)_Javascript_Arrays_Data Structures_Ecmascript 6 - Fatal编程技术网

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

Javascript 合并两个数组并保留其他字段(数组对象之间的差异),javascript,arrays,data-structures,ecmascript-6,Javascript,Arrays,Data Structures,Ecmascript 6,我找不到一个干净的方法来合并两个数组并保留额外的字段,即数组对象之间的差异 const currentForm=[ { 名称:“用户名”, 键入:“字符串”, 信息:“输入用户名”, 值:“测试” }, { 名称:“密码”, 键入:“aes”, 信息:“输入密码”, 值:“通过” } ]; 常数newForm=[ { 名称:“用户名”, 键入:“字符串”, 信息:“输入用户名” } ]; 合并后,我需要此阵列: const currentForm=[ { 名称:“用户名”, 键入:“字符串”,

我找不到一个干净的方法来合并两个数组并保留额外的字段,即数组对象之间的差异

const currentForm=[
{
名称:“用户名”,
键入:“字符串”,
信息:“输入用户名”,
值:“测试”
},
{
名称:“密码”,
键入:“aes”,
信息:“输入密码”,
值:“通过”
}
];
常数newForm=[
{
名称:“用户名”,
键入:“字符串”,
信息:“输入用户名”
}
];
合并后,我需要此阵列:

const currentForm=[
{
名称:“用户名”,
键入:“字符串”,
信息:“输入用户名”,
值:“测试”
}
];
我用一个复杂的函数实现了这一点,但我认为用es6语法很容易实现


工作示例:

如果
名称是每个对象的唯一键,则可以执行以下操作

  • 首先,我们将具有相同名称的所有字段合并为 .
    • 我们在另一个数组中使用相同的字段
    • 我们使用
  • 然后我们过滤掉我们不再使用的字段
    • 为了查看新数组中是否存在对象,我们使用该数组返回一个布尔值作为结果,我们可以将其传递回filter方法
const currentForm=[
{
名称:“用户名”,
键入:“字符串”,
信息:“输入用户名”,
值:“测试”
},
{
名称:“密码”,
键入:“aes”,
信息:“输入密码”,
值:“通过”
}
];
常数newForm=[
{
名称:“用户名”,
键入:“字符串”,
信息:“输入用户名”
}
];
const mergeForms=(第一种形式,第二种形式)=>{
//合并所有字段
const mergedFields=firstForm.map((obj)=>({…obj,…secondForm.find({name})=>obj.name==name}));
//过滤掉我们不再拥有的字段
const fieldstokep=mergedFields.filter((obj)=>newForm.some({name}=>obj.name==name));
//返回字段
返回场;
};
//合并2张表格
const mergedForm=mergeForms(currentForm,newForm);

console.log(mergedForm)
如果
名称
是每个对象的唯一键,我们可以执行以下操作

  • 首先,我们将具有相同名称的所有字段合并为 .
    • 我们在另一个数组中使用相同的字段
    • 我们使用
  • 然后我们过滤掉我们不再使用的字段
    • 为了查看新数组中是否存在对象,我们使用该数组返回一个布尔值作为结果,我们可以将其传递回filter方法
const currentForm=[
{
名称:“用户名”,
键入:“字符串”,
信息:“输入用户名”,
值:“测试”
},
{
名称:“密码”,
键入:“aes”,
信息:“输入密码”,
值:“通过”
}
];
常数newForm=[
{
名称:“用户名”,
键入:“字符串”,
信息:“输入用户名”
}
];
const mergeForms=(第一种形式,第二种形式)=>{
//合并所有字段
const mergedFields=firstForm.map((obj)=>({…obj,…secondForm.find({name})=>obj.name==name}));
//过滤掉我们不再拥有的字段
const fieldstokep=mergedFields.filter((obj)=>newForm.some({name}=>obj.name==name));
//返回字段
返回场;
};
//合并2张表格
const mergedForm=mergeForms(currentForm,newForm);

console.log(mergedForm)我不清楚你想要实现什么

如果要将第一个数组的每个对象与另一个数组中相同位置的对象合并,请执行以下操作:

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

我不清楚你想达到什么目的

如果要将第一个数组的每个对象与另一个数组中相同位置的对象合并,请执行以下操作:

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

我不明白。您的结果似乎是一个包含原始
currentForm[0]
的数组。我没有看到任何合并。password对象发生了什么?如果代码有效,并且您正在寻找改进建议,那么这是合适的位置。但请先看。我希望它适用于任何currentForm/newFormarray@Reyno由于新表单不包含密码字段,因此它不会出现在合并的数组中。您的结果似乎是一个包含原始
currentForm[0]
的数组。我没有看到任何合并。password对象发生了什么?如果代码有效,并且您正在寻找改进建议,那么这是合适的位置。但请先看。我希望它适用于任何currentForm/newFormarray@Reyno由于新表单不包含密码字段,因此它不会出现在合并的ArrayTanks中!那太干净了!我忘了提到我还想保留以newForm而不是currentForm形式出现的字段。为了解决这个问题,我在您的解决方案中添加了一个步骤:谢谢!那太干净了!我忘了提到我还想保留以newForm而不是currentForm形式出现的字段。为了解决这个问题,我在您的解决方案中添加了一个步骤: