Конвертировать объекты в массив с тем же ключом объекта - PullRequest
1 голос
/ 04 июня 2019

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

Это объекты

let data = {
  123: {id: 123, name: "John"}
  456: {id: 456, name: "Doe"}
  789: {id: 789, name: "Maria"}
}

и преобразовать в массив с длиной, без автоматически сгенерированного индекса, например, 0,1,3

Я уже пробовал что-то подобное

let data = {
  123: {id: 123, name: "John"},
  456: {id: 456, name: "Doe"},
  789: {id: 789, name: "Maria"}
}
let item = [];
for (var prop in data) {
   item.push(data[prop])
}

Фактический результат :

0: {id: 123, name: "John"}
1: {id: 456, name: "Doe"}
2: {id: 789, name: "Maria"}
length: 3
__proto__: Array(0)

Ожидаемый результат :

123: {id: 123, name: "John"}
456: {id: 456, name: "Doe"}
789: {id: 789, name: "Maria"}
length: 3
__proto__: Array(0)
​

Как мне этого добиться?

Пожалуйста, помогите

Ответы [ 4 ]

1 голос
/ 04 июня 2019

просто изменить: item.push(data[prop]) в item[prop] = data[prop]

но он станет разреженным массивом. (и его размер не будет 3, как вы ожидаете)

0 голосов
/ 04 июня 2019

Я на самом деле не знаю, как вы мотивируете его хранить по вашему желанию (это вообще невозможно), но я предполагаю, что вы хотите сделать это, чтобы поддерживать какой-то порядок и гарантировать, что при переборе массиваВы поддерживаете порядок?

Очень распространенная практика для поддержания порядка объектов состоит в том, чтобы отделить отсортированный индекс от самого объекта.

Вам просто нужна функция сортировки, которая создает ваш индекс.

const sortedIndex = [123, 456, 789];

const unsortedData = {
  456: {id: 456, name: "Doe"}
  123: {id: 123, name: "John"}
  789: {id: 789, name: "Maria"}
}

sortedIndex.foreach(index => { item = unsortedData[index]; })
0 голосов
/ 04 июня 2019

Мы можем добиться этого с помощью приведенного ниже кода, но индексы, отличные от 123, 456, 789, будут иметь неопределенные значения в вашем массиве.

let data = {
  123: {id: 123, name: "John"},
  456: {id: 456, name: "Doe"},
  789: {id: 789, name: "Maria"}
}
let item = [];
for (var prop in data) {
   item[prop] = data[prop];
}

console.log(item);

Но в другом месте он будет иметь неопределенные значения, длина массива будет 789 .Мы не можем иметь свой собственный индекс в массиве.Когда мы пытаемся дать, он автоматически назначает неопределенные для остальных индексов.

0 голосов
/ 04 июня 2019

С данными индексами вы получаете разреженный массив из-за дыр.

let data = { 123: { id: 123, name: "John" }, 456: { id: 456, name: "Doe" }, 789: { id: 789, name: "Maria" } },
    array = Object.assign([], data);
    
console.log(array);
.as-console-wrapper { max-height: 100% !important; top: 0; }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...