【问题标题】:Assigning value 0 to unmatched item in two different array将值 0 分配给两个不同数组中的不匹配项
【发布时间】:2020-06-24 13:34:19
【问题描述】:

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

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 中不匹配的项目,如何实现 'count' : 0 ?我的意思是如何获得以下输出:
[
  {
    "id": 1,
    "count": 30,
    "name": "Rohit"
  },
  {
    "id": 2,
    "count": 20,
    "name": "Raj"
  },
  {
    "id": 3,
    "count": 0
    "name": "Maggie",
  }
]

【问题讨论】:

    标签: javascript arrays list


    【解决方案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);

    【讨论】:

      【解决方案2】:

      你快到了

      如果...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)

      【讨论】:

        【解决方案3】:

        您可以使用以下实用程序。

        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)

        希望对你有帮助

        【讨论】:

          【解决方案4】:

          一个可能的解决方案是

          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)

          【讨论】:

            【解决方案5】:

            如果您在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>

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2022-01-20
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2018-04-23
              • 2013-01-28
              • 2022-01-26
              相关资源
              最近更新 更多