Как изменить порядок массива объекта с помощью массива заказа? - PullRequest
1 голос
/ 19 марта 2019

Мне нужно изменить порядок некоторых объектов в массиве.

Предположим, это мой массив данных:

const data = [
  { id: 'ETHUVMY0m', name: 'item 1', value: 'value 1' },
  { id: 'McfTB40vO', name: 'item 2', value: 'value 2' }
]

И есть еще один массив, который представляет новый порядок:

const order = [ 'McfTB40vO', 'ETHUVMY0m' ]

Как видите, второй предмет занимает первое место.

Таким образом, результат должен быть:

[
  { id: 'McfTB40vO', name: 'item 2', value: 'value 2' },
  { id: 'ETHUVMY0m', name: 'item 1', value: 'value 1' }
]

Я подумал об использовании цикла forEach:

data.forEach(d => {
  order.indexOf(d.id) // get new index
  // but how to reorder the array?
})

Ответы [ 3 ]

3 голосов
/ 19 марта 2019

Преобразование data в Карта объектов по id. Затем используйте Array.map() в массиве order и получите соответствующий элемент с карты:

const data = [
  { id: 'ETHUVMY0m', name: 'item 1', value: 'value 1' },
  { id: 'McfTB40vO', name: 'item 2', value: 'value 2' }
]

const order = [ 'McfTB40vO', 'ETHUVMY0m' ]

const dataMap = new Map(data.map(o => [o.id, o]))
const result = order.map(id => dataMap.get(id))

console.log(result)
2 голосов
/ 19 марта 2019

Если вы хотите сделать это неизменно, используйте карту и найдите, а не forEach:

const data = [
  { id: 'ETHUVMY0m', name: 'item 1', value: 'value 1' },
  { id: 'McfTB40vO', name: 'item 2', value: 'value 2' }
];

const order = [ 'McfTB40vO', 'ETHUVMY0m' ];

const result = order.map(id => data.find(x => x.id === id));

console.log(result);
0 голосов
/ 19 марта 2019

Вы можете map сверх order:

const data = [{
    id: 'ETHUVMY0m',
    name: 'item 1',
    value: 'value 1'
  },
  {
    id: 'McfTB40vO',
    name: 'item 2',
    value: 'value 2'
  }
]

const order = ['McfTB40vO', 'ETHUVMY0m']

const output = order.map(d => data.find(({
  id
}) => d == id));

console.log(output);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...