Преобразовать массив в объект без сортировки ключей в javascript - PullRequest
1 голос
/ 01 мая 2020

У меня есть объект

{
1: {id: 1, first: 1, last: 5}
2: {id: 2, first: 6, last: 10}
3: {id: 3, first: 11, last: 15}
}

Мне нужно изменить порядок элементов без сортировки ключей, чтобы окончательный результат был следующим:

{
1: {id: 3, first: 11, last: 15}
2: {id: 2, first: 6, last: 10}
3: {id: 1, first: 1, last: 5}
}

Возможно ли это?

Я пытался преобразовать его в массив, а затем в объект, но новый объект начинается с ключа 0, а мне нужно, чтобы он начинался с ключа 1:

let array = [];
Object.values(this.props.items)
.sort()
.reverse()
.forEach(function(b) {
    array.push(b);
});

const newItems = Object.assign({}, array);

// Result:
{
0: {id: 3, first: 11, last: 15}
1: {id: 2, first: 6, last: 10}
2: {id: 1, first: 1, last: 5}
}

EDIT

Стоит отметить, что мой объект набран:

Кстати this.props.items набран TypeScript объект напр. Section.Item[]

Ответы [ 3 ]

2 голосов
/ 01 мая 2020

Вы можете получить ключи и значения и назначить выделенное значение ключам.

var object = { 1: { id: 1, first: 1, last: 5 }, 2: { id: 2, first: 6, last: 10 }, 3: { id: 3, first: 11, last: 15 } },
    values = Object.values(object)

Object.keys(object).forEach(k => object[k] = values.pop());

console.log(object);
1 голос
/ 01 мая 2020

Вы можете использовать fromEntries

const data = {
  1: { id: 1, first: 1, last: 5 },
  2: { id: 2, first: 6, last: 10 },
  3: { id: 3, first: 11, last: 15 },
};
console.log(
  Object.fromEntries(
    Object.values(data)
      .reverse()
      .map((val, index) => [index + 1, val])
  )
);
0 голосов
/ 01 мая 2020

Возможно, вы можете попробовать это

let obj = {
  1: {id: 1, first: 1, last: 5},
  2: {id: 2, first: 6, last: 10},
  3: {id: 3, first: 11, last: 15}
}

const newItems = {}
let totalKeys = Object.keys(obj).length

for (let key in obj) {
  newItems[totalKeys] = obj[key];

  totalKeys -= 1;
}

console.log(newItems);
...