给定一个 javascript 对象,如何在 ECMAScript-6中将其转换为数组?
例如:
var inputObj = {a:'foo', b:[1,2,3], c:null, z:55};
预期产出将是:
['foo', [1,2,3], null, 55]
结果中元素的顺序对我来说并不重要。
这可以通过 数组理解语法实现:
[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 强 > )。
Array.map
编辑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和 箭头函数(仅用于简短语法,不用于功能) :
keys
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]
总而言之,在 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 中
Object.entries()
Object.keys()
第一个从这里开始
var firstar = Object.entries(address);
在这里,我分配地址到 firstar,当你将运行这个,你会得到这样的输出
firstar
(3) [Array(2), Array(2), Array(2)]
第二个从这里开始
var secstar = Object.keys(address2);
这里我把 address2分配给 secstar,当你运行它的时候,你会得到这样的输出
secstar
(3) ["street", "city", "country"]