Сравните два массива и добавьте новые ключи на основе индекса обоих массивов. - PullRequest
0 голосов
/ 12 октября 2018

Я создаю диаграмму солнечных лучей в верхних диаграммах, и у меня возникают проблемы при создании слоев в массиве.

Например, массив заголовков - это слой 2, а массив данных - это слой 3.

Мне нужно сравнить headername с группами из данных и создать новый массив, содержащий и дочерний, и родительский идентификаторы.

Разместите моё текущее решение под кодом.

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 Ответ

0 голосов
/ 12 октября 2018

Вам не нужны вложенные карты - это приведет к вложенным массивам результатов.Вам нужен только один, потому что между data и ожидаемым результатом есть отношение 1-к-1.Вы можете просто 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...