簡體   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