JavaScript创建一个由对象属性值组成的数组

4

在Javascript中,考虑到以下对象

{
  "0": "hello",
  "1": { text: "world" }
}

从那个对象创建这个数组的最短方式是什么?
[
  "hello",
  { text: "world" }
]

我看到有人使用Array.prototype.splice(theObject),但是对我来说似乎不起作用。
更新:
  1. 输出的顺序必须得到保证。
  2. 01可以是任意字符串值,并且在相应的数组中需要维护属性级别的顺序。
  3. 需要在Node.js 6上运行。
5个回答

4

只需使用Object.values:

console.log(Object.values({
  "0": "hello",
  "1": { text: "world" }
}));


3
这个方法可以运行,但不能保证“hello”会是结果数组的第一个值。 - Pointy
谢谢您快速的回复,请查看我更新的问题。 - Alexander Zeitler

2

如果你想确保对象的原始键对应于结果数组中的位置,你不能依赖于 Object.values() 或者 for ... in 循环。你可以使用 Object.keys() 并对该数组进行排序。

var keys = Object.keys(yourObject);
keys.sort();
var array = keys.map(key => yourObject[key]);

现在了解到,调用.sort()可以包括一个比较函数,以对原始对象键施加任何所需的排序。OP中的示例非常简单,上述方法可以运行。然而,更复杂的键可能需要一个自定义的比较器。

我认为如果键入超过一个数字,这可能会给出错误的顺序,因为它会按照它认为的字母顺序对它们进行排序。 - OliverRadini
1
@OliverRadini 是的,这取决于键值;OP没有详细说明。重点是.sort()可以明确地强制执行所需的任何排序。我会扩展答案。 - Pointy

1
这应该基于键来保持顺序,包括键具有多个数字的情况。

const test = {
  "0": "hello",
  "3": "three",
  "1": { text: "world" },
  "2": "two",
  "11": "eleven",
}

const transform = obj => Object.keys(obj)
  .sort((a, b) => parseInt(a) > parseInt(b) ? 1 : -1)
  .map(key => obj[key])
  
 console.dir(transform(test))


0
尝试使用如下的for..in循环:
let obj = {
  "0": "hello",
  "1": { text: "world" }
   }
  let result = []
  for(var value in obj){
     result.push(obj[value])
   }

0

let src = {
  "0": "hello",
  "1": {
    text: "world"
  }
}

let res = [src].map(it => [it['0'], it['1']])

console.log(res)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接