以下代码具有带有公共字段(键)的两个不同的数组。我正在使用该键来组合这些数组并生成一个新数组。
const listA = [
{"id": 1, "name":"Rohit"},
{"id": 2, "name":"Raj"},
{"id": 3, "name":"Maggie"}
]
const listB = [
{"id": 1, "count": 30},
{"id": 2, "count": 20}
]
const merge = listA.map(a => ({
...listB.find((b) => (b.id === a.id) && b), ...a
}))
console.log(merge)
[
{
"id": 1,
"count": 30,
"name": "Rohit"
},
{
"id": 2,
"count": 20,
"name": "Raj"
},
{
"id": 3,
"count": 0
"name": "Maggie",
}
]
答案 0 :(得分:1)
您可以在扩展运算符覆盖(或不覆盖)键之前定义计数。
const listA = [{
id: 1,
name: 'Rohit',
},
{
id: 2,
name: 'Raj',
},
{
id: 3,
name: 'Maggie',
},
];
const listB = [{
id: 1,
count: 30,
},
{
id: 2,
count: 20,
},
];
const merge = listA.map(a => ({
count: 0,
...listB.find(b => (b.id === a.id) && b),
...a,
}));
console.log(merge);
您可以处理find
找不到任何内容的情况:
const listA = [{
id: 1,
name: 'Rohit',
},
{
id: 2,
name: 'Raj',
},
{
id: 3,
name: 'Maggie',
},
];
const listB = [{
id: 1,
count: 30,
},
{
id: 2,
count: 20,
},
];
const merge = listA.map(a => ({
...(listB.find(b => (b.id === a.id) && b) || {
count: 0,
}),
...a,
}));
console.log(merge);
答案 1 :(得分:0)
你快到了
如果...listB.find((b) => (b.id === a.id) && b)
是undefined
,则可以使用...listB.find((b) => (b.id === a.id) && b) || { "count":0 }
:
const listA = [
{"id": 1, "name":"Rohit"},
{"id": 2, "name":"Raj"},
{"id": 3, "name":"Maggie"}
]
const listB = [
{"id": 1, "count": 30},
{"id": 2, "count": 20}
]
const merge = listA.map(a => ({
...listB.find((b) => (b.id === a.id) && b) || { "count":0 }, ...a
}))
console.log(merge)
答案 2 :(得分:0)
您可以使用以下实用程序。
const listA = [
{"id": 1, "name":"Rohit"},
{"id": 2, "name":"Raj"},
{"id": 3, "name":"Maggie"}
]
const listB = [
{"id": 1, "count": 30},
{"id": 2, "count": 20}
]
const result = listA.map(objA => {
const foundObj = listB.find(objB => objB.id === objA.id) || {count: 0}
return {...objA, ...foundObj}
})
console.log(result)
希望这会有所帮助
答案 3 :(得分:0)
可能的解决方案是
const listA = [
{"id": 1, "name":"Rohit"},
{"id": 2, "name":"Raj"},
{"id": 3, "name":"Maggie"}
]
const listB = [
{"id": 1, "count": 30},
{"id": 2, "count": 20}
]
const merge = listA.map(a => ({
...listB.find((b) => (b.id === a.id) && b) || {count: 0 }, ...a
}))
console.log(merge)
答案 4 :(得分:0)
如果您在listB
中找不到匹配的项目,只需使用默认值即可计数
const mapped = listA.map(({id, name}) => {
const {count} = {count: 0, ...listB.find(({id: _id}) => id === _id)}
return {id, name, count}
})
console.log (mapped);
<script>
const listA = [
{"id": 1, "name":"Rohit"},
{"id": 2, "name":"Raj"},
{"id": 3, "name":"Maggie"}
]
const listB = [
{"id": 1, "count": 30},
{"id": 2, "count": 20}
]
</script>