代码之家  ›  专栏  ›  技术社区  ›  arunmmanoharan

比较两个数组并根据两个数组的索引添加新的键

  •  0
  • arunmmanoharan  · 技术社区  · 6 年前

    我正在高图表中创建一个太阳爆发图,在数组中创建层时遇到问题。

    例如,headers数组是layer 2,data数组是layer 3。

    已经在代码下面发布了我当前的解决方案。

    const headers = ['Cars', 'Fruits', 'Food'];
    
    const data = [{
        group: 'Cars',
        name: 'BMW',
        value: '25641'
      }, {
        group: 'Fruits',
        name: 'Apple',
        value: '45876'
      },
      {
        group: 'Cars',
        name: 'Benz',
        value: '65784'
      },
      {
        group: 'Cars',
        name: 'Toyota',
        value: '254'
      },
      {
        group: 'Food',
        name: 'Pizza',
        value: '87535'
      },
      {
        group: 'Cars',
        name: 'Honda',
        value: '65796'
      },
      {
        group: 'Fruits',
        name: 'Banana',
        value: '98631'
      },
      {
        group: 'Fruits',
        name: 'Orange',
        value: '87563'
      },
      {
        group: 'Food',
        name: 'Burger',
        value: '78324'
      },
      {
        group: 'Fruits',
        name: 'Mango',
        value: '24598'
      }
    ]

    这就是我试过的。

    const newArray = headers.map(function(itemA, indexA) {
      return data.map(function(itemB, indexB) {
      return {
        id: `3.${indexB + 1}`,
        parentId: `2.${indexA + 1}`,
        value: itemB.value,
        name: itemB.name
      }
      })
    })

    这是我期望的输出:

    const newArray = [{
        id: '3.1',
        parentId: '2.1',
        name: 'BMW',
        value: '25641'
      }, {
        id: '3.2',
        parentId: '2.2',
        name: 'Apple',
        value: '45876'
      },
      {
        id: '3.3',
        parentId: '2.1',
        name: 'Benz',
        value: '65784'
      },
      {
        id: '3.4',
        parentId: '2.1'
        name: 'Toyota',
        value: '254'
      },
      {
        id: '3.5',
        parentId: '2.3',
        name: 'Pizza',
        value: '87535'
      },
      {
        id: '3.6',
        parentId: '2.1',
        name: 'Honda',
        value: '65796'
      },
      {
        id: '3.7',
        parentId: '2.2',
        name: 'Banana',
        value: '98631'
      },
      {
        id: '3.8',
        parentId: '2.2',
        name: 'Orange',
        value: '87563'
      },
      {
        id: '3.9',
        parentId: '2.3',
        name: 'Burger',
        value: '78324'
      },
      {
        id: '3.10',
        parentId: '2.2',
        name: 'Mango',
        value: '24598'
      }
    ]
    1 回复  |  直到 6 年前
        1
  •  1
  •   Mark    6 年前

    您不需要嵌套映射,它将导致结果的嵌套数组。你只需要一个,因为两者之间有一对一的关系 data 以及你的预期产出。你可以 map()

    const headers = ['Cars', 'Fruits', 'Food'];
    
    const data = [{group: 'Cars',name: 'BMW',value: '25641'}, {group: 'Fruits',name: 'Apple',value: '45876'},{group: 'Cars',name: 'Benz',value: '65784'},{group: 'Cars',name: 'Toyota',value: '254'},{group: 'Food',name: 'Pizza',value: '87535'},{group: 'Cars',name: 'Honda',value: '65796'},{group: 'Fruits',name: 'Banana',value: '98631'},{group: 'Fruits',name: 'Orange',value: '87563'},{group: 'Food',name: 'Burger',value: '78324'},{group: 'Fruits',name: 'Mango',value: '24598'}]
    
    const newArray = data.map(function(itemB, indexB) {
        let parentIndex = headers.indexOf(itemB.group) // just find the parent index
        return {
          id: `3.${indexB + 1}`,
          parentId: `2.${parentIndex + 1}`,
          value: itemB.value,
          name: itemB.name
        }
        })
    
    console.log(newArray)