JavaScript创建对象属性值的数组

时间:2018-08-09 13:58:51

标签: javascript node.js

使用JavaScript给出该对象

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

从该对象创建此数组的最短方法是什么?

[
  "hello",
  { text: "world" }
]

我见过有人在使用Array.prototype.splice(theObject),但它似乎不适用于我。

更新

  1. 需要保证输出顺序
  2. 01可以是任意字符串值,并且属性级别的顺序需要在相应的数组中维护。
  3. 需要使用Node.js 6

5 个答案:

答案 0 :(得分:4)

只需使用Object.values:

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

答案 1 :(得分:2)

如果要确保对象的原始键与结果数组中的位置相对应,则不能依赖Object.values()for ... in循环。您可以使用Object.keys()并对数组进行排序。

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

现在可以理解,对.sort()的调用可以包含一个比较器函数,以对原始对象键施加所需的任何顺序。 OP中的示例非常简单,上面的示例就可以了。但是,更复杂的键可能需要自定义比较器。

答案 2 :(得分: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))

答案 3 :(得分:0)

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

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

console.log(res)

答案 4 :(得分:0)

尝试像这样使用for..in循环:

let obj = {
  "0": "hello",
  "1": { text: "world" }
   }
  let result = []
  for(var value in obj){
     result.push(obj[value])
   }