[英]Converting Object to Array using ES6 features
给定一个 javascript 对象,如何将其转换为 ECMAScript-6 中的数组?
例如,给定:
var inputObj = {a:'foo', b:[1,2,3], c:null, z:55};
预期输出将是:
['foo', [1,2,3], null, 55]
结果中元素的顺序对我来说并不重要。
在带有箭头函数的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.values
Object.values(inputObj); // => ['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 ]
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 中,有三 (3) 种变体可以将对象转换为数组,如下所示:
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'] ]
可以按如下方式将数组转换回对象:
const array = [ ['one', 1], ['two', 2], ];
Object.fromEntries(array);
// { one: 1, two: 2 }
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}`);
const address = {
street: "bew1111",
city: "err111",
country: "ind11"
};
const address2 = {
street: "bewscxsd",
city: "errdc",
country: "indcdsc"
};
我们这里有两个对象,我将使用 2 种方法将两个对象分配到 Array
Object.entries()
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"]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.