使用 ES6特性将 Object 转换为 Array

给定一个 javascript 对象,如何在 ECMAScript-6中将其转换为数组?

例如:

 var inputObj = {a:'foo', b:[1,2,3], c:null, z:55};

预期产出将是:

 ['foo', [1,2,3], null, 55]

结果中元素的顺序对我来说并不重要。

116820 次浏览

这可以通过 数组理解语法实现:

[for (key of Object.keys(inputObj)) inputObj[key]]

用法例子:

var inputObj = {a:'foo', b:[1,2,3], c:null, z:55};
var arr = [for (key of Object.keys(inputObj)) inputObj[key]];
console.log(arr);


// prints [ 'foo', [ 1, 2, 3 ], null, 55 ]

我喜欢传统的方式:

var i=0, arr=[];
for (var ob in inputObj)
arr[i++]=ob;

如果没有更高的评价,老派的学校会以很大的优势赢得 Jsperf 测试。有时候新加入的学校是“错误的特征”

Array.map相当于 @ Bergi的箭头函数(有关 Array.map的更多信息,请参见 MDN )。

编辑2020 : 转换为代码片段并添加了一个替代方案

const obj = {
a: 'foo',
b: [1, 2, 3],
c: null,
z: 55
},
nwArr = Object.keys(obj).map(k => obj[k]),
// Alternative
nwArr2 = Object.fromEntries(Object.entries(obj));
nwArr.a = "bar";
nwArr2.a = "foobar"
console.log(`obj.a: ${obj.a}, nwArr.a: ${nwArr.a}, nwArr2.a: ${nwArr2.a}`);

keys上使用(ES5) Array::map箭头函数(仅用于简短语法,不用于功能) :

let arr = Object.keys(obj).map((k) => obj[k])

真正的 ES6风格是编写一个生成器,并将其转换为一个数组:

function* values(obj) {
for (let prop of Object.keys(obj)) // own properties, you might use
// for (let prop in obj)
yield obj[prop];
}
let arr = Array.from(values(obj));

遗憾的是,没有 对象迭代器对象迭代器进入 ES6。

Object.value

Object.values(inputObj); // => ['foo', [1,2,3], null, 55]

ES7方法:

let obj = { a: "foo", b: "bar", c: 1, d: [1, 2, 3, 4] }


Object.values(obj)


// output --> ['foo', 'bar', 1, [1, 2, 3, 4]

2020年8月最新情况

总而言之,在 ES6中,将 Object 转换为 Array 有三个变体,如下所示:

const MyObjects = {   key1: 'value 1',   key2: 'value 2', };


// Method 1: Converts the keys to Array
// --------------------------------------


Object.keys(MyObjects);
// ['key1', 'key2']


// Method 2 Converts the Values to Array
// --------------------------------------


Object.values(MyObjects);
// ['value 1', 'value 2']


// Method 3 Converts both Values and Keys
// --------------------------------------


Object.entries(MyObjects);
// [ ['key1', 'value 1'], ['key2', 'value 2'] ]


将 Array 转换回 Object 的过程如下:

const array = [  ['one', 1],   ['two', 2], ];


Object.fromEntries(array);


// { one: 1, two: 2 }


const address = {
street: "bew1111",
city: "err111",
country: "ind11"
};
const address2 = {
street: "bewscxsd",
city: "errdc",
country: "indcdsc"
};

我们这里有两个对象,我将使用两个方法将两个对象赋值到 Array 中

  1. Object.entries()

  2. Object.keys()

第一个从这里开始

var firstar = Object.entries(address);

在这里,我分配地址到 firstar,当你将运行这个,你会得到这样的输出

(3) [Array(2), Array(2), Array(2)]

第二个从这里开始

var secstar = Object.keys(address2);

这里我把 address2分配给 secstar,当你运行它的时候,你会得到这样的输出

 (3) ["street", "city", "country"]