将值0分配给两个不同数组中的不匹配项

时间:2020-06-24 13:34:19

标签: javascript arrays list

以下代码具有带有公共字段(键)的两个不同的数组。我正在使用该键来组合这些数组并生成一个新数组。

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)
如何获得ListA中不匹配项的“计数”:0?我的意思是我该如何实现以下输出:

[
  {
    "id": 1,
    "count": 30,
    "name": "Rohit"
  },
  {
    "id": 2,
    "count": 20,
    "name": "Raj"
  },
  {
    "id": 3,
    "count": 0
    "name": "Maggie",
  }
]

5 个答案:

答案 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>