сортировать базу объектов по массиву для создания отсортированного массива - PullRequest
0 голосов
/ 02 июля 2018

Объект не гарантирует порядок при его отображении, поэтому мне нужно преобразовать существующий объект в массив, но следуйте порядку.

У меня есть этот массив в порядке [1,2,3]

и это мой исходный источник ака

{'2': 'two',
'3': 'three',
'1':'one'}

Как мне создать функцию для создания нового массива, в котором порядок следовал бы за отсортированным ключом выше?

Я застрял на этом этапе

//expected 
['one', 'two', 'three']
const order = ['1', '2', '3']
const source = {
  '2': 'two',
  '3': 'three',
  '1': 'one'
}

let sorted = Object.keys(source).map(o => {
  //return order.includes(o) ? //what to do here : null
})

Я думаю, что я должен сделать цикл внутри цикла.

Ответы [ 2 ]

0 голосов
/ 02 июля 2018

Может просто отобразить массив order и вернуть соответствующее значение из source. Все, что за этим, чрезмерно усложняет

const order = ['1', '2', '3']
const source = {
  '2': 'two',
  '3': 'three',
  '1': 'one'
}

const sorted = order.map(n=>source[n])

console.log(sorted)
0 голосов
/ 02 июля 2018

Вы можете уменьшить упорядоченный массив и найти соответствующие строки из исходного объекта. Этот метод использует только один цикл и, следовательно, более эффективен.

const order = ['1', '2', '3', '4', '5'];
const source = {
  '2': 'two',
  '5': 'five',
  '3': 'three',
  '1': 'one',
  '4': 'four'
};

let sorted = order.reduce((obj, item) => {
  obj.push(source[item]);
  return obj;
}, []);

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