繁体   English   中英

使用 ES6 特性将对象转换为数组

[英]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]

我喜欢老派的方式:

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

老派在jsperf 测试大获全胜,如果不是赞成票的话。 有时,新增功能是“错误功能”。

这可以使用数组理解语法来实现:

[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]

2020 年 8 月更新

总而言之,在 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

  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"]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM