Я хочу отсортировать объекты в другом порядке массива - PullRequest
0 голосов
/ 03 августа 2020

①Существует такой массив.

const array = ['a', 'b', 'c', 'd', 'E'];

②Существует объект.

const obj = {
  'b': ['aa', 'bb', 'cc'],
  'a': ['ac', 'bc', 'cs'],
  'c': ['as', 'b', 'c_1'],
  'E': ['a_4', 'b_4', 'c_4'],
  'd': ['a_4', 'b_4', 'c_4']
};

Если вы хотите переставить их в соответствии с порядком расположения ①.

Я хочу, чтобы результат был таким.

const obj = {
  'a': ['ac', 'bc', 'cs'],
  'b': ['aa', 'bb', 'cc'],
  'c': ['as', 'b', 'c_1'],
  'd': ['a_4', 'b_4', 'c_4'],
  'E': ['a_4', 'b_4', 'c_4']
};

Можно ли это сделать только с помощью функции карты и сортировки?

Ответы [ 2 ]

1 голос
/ 03 августа 2020

Использование indexOf() и reduce()

const array = ['a', 'b', 'c', 'd', 'E'];

const obj = {
  'b': ['aa', 'bb', 'cc'],
  'a': ['ac', 'bc', 'cs'],
  'c': ['as', 'b', 'c_1'],
  'E': ['a_4', 'b_4', 'c_4'],
  'd': ['a_4', 'b_4', 'c_4']
};

// console.log(JSON.stringify(obj))

const res = Object.keys(obj)
    .sort((a, b) => array.indexOf(a) - array.indexOf(b))
    .reduce((a, k) => ({...a, [k]: obj[k] }), {})

console.log(JSON.stringify(res))

Использование Object.fromEntries() и Object.entries()

const array = ['a', 'b', 'c', 'd', 'E'];

const obj = {
  'b': ['aa', 'bb', 'cc'],
  'a': ['ac', 'bc', 'cs'],
  'c': ['as', 'b', 'c_1'],
  'E': ['a_4', 'b_4', 'c_4'],
  'd': ['a_4', 'b_4', 'c_4']
};

// console.log(JSON.stringify(obj))

const res = Object.fromEntries(Object.entries(obj)
    .sort((a, b) => array.indexOf(a[0]) - array.indexOf(b[0])))

console.log(JSON.stringify(res))
0 голосов
/ 03 августа 2020

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

const array = ['a', 'b', 'c', 'd', 'E'];
const obj = {
  'b': ['aa', 'bb', 'cc'],
  'a': ['ac', 'bc', 'cs'],
  'c': ['as', 'b', 'c_1'],
  'E': ['a_4', 'b_4', 'c_4'],
  'd': ['a_4', 'b_4', 'c_4']
};

let result = array.reduce((accumulator, currentItem)=>{
    accumulator[currentItem] = obj[currentItem];
    return accumulator;
},{});

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