我每次选择一个值时都有一个对象数组,我将其推入数组中,我想合并具有相同键(即键“code”)的两个对象,并删除空值
(4) [{…}, {…}, {…}, {…}]
0: {code: "abc", value: "", access: "A"}
1: {code: "abc", value: "ok", access: ""}
2: {code: "def", value: "xyz", access: ""}
3: {code: "def", value: "", access: "B"}
the output should be
(2) [{…},{…}]
0: { code: "abc", value: "ok", access: "A"}
1: {code: "def", value: "xyz", access: "B"}
我尝试过使用展开运算符,但它不起作用。请帮帮我
您可以使用 .reduce(..) 这是一个示例:
const input = [
{code: "abc", value: "", access: "A"},
{code: "abc", value: "ok", access: ""},
{code: "def", value: "xyz", access: ""},
{code: "def", value: "", access: "B"}
];
const output = input.reduce((a, c) => {
const found = a.find(({ code }) => c.code === code);
if (found) {
Object.entries(c).forEach(([key, value]) => {
if (!found[key]) {
found[key] = value;
}
});
} else {
a.push(c);
}
return a;
}, []);
console.log(output);
即使这对于示例输入正确有效,但在某些情况下也会失败,因为它替换了所有 falsy 值(布尔值
false
数字 0
等),这可能不是您的意图。
为防止出现这种情况,请将
!found[key]
语句中的 if
条件替换为适合您需要的任何检查。