使用相同的对象键将对象转换为数组

时间:2019-06-04 12:45:29

标签: javascript arrays reactjs object

我有一个数据对象,我想在不更改对象索引的情况下将其转换为普通数组。

此对象

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 个答案:

答案 0 :(得分:1)

只需更改: item.push(data[prop])item[prop] = data[prop]

,但它将变为稀疏数组。 (它的大小不会像您期望的那样为3)

答案 1 :(得分:0)

使用给定的索引,由于存在孔,您将获得一个稀疏数组。

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; }

答案 2 :(得分:0)

我们可以通过以下代码来实现这一点,但是除了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 。我们不能在数组中拥有自己的索引。当我们尝试提供时,它将为剩余索引自动分配undefined。

答案 3 :(得分:0)

我实际上不知道您是否愿意按照您的意愿存储它(根本不可能),但是我想您想这样做是为了维持某种顺序并确保在迭代数组时,您维持订单吗?

维护对象顺序的一种非常普遍的做法是将排序后的索引与对象本身分离。

您只需要创建索引的排序功能即可。

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]; })