web-dev-qa-db-ja.com

ES6機能を使用してオブジェクトを配列に変換する

Javascriptオブジェクトが与えられた場合、ECMAScript-6で配列に変換するにはどうすればよいですか?

たとえば、次の場合:

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

予想される出力は次のとおりです。

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

結果の要素の順序は重要ではありません。

47
urish

使用(ES5) Array::mapkeys over - arrow function (短い構文のみで、機能ではない):

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 iterator はありません。

84
Bergi

Object.values を使用するだけです

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

これは Array Comprehension構文 を使用して実現できます。

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

私は古い学校の方法が好きです:

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

古い学校は、 jsperf test に勝ち目がなければ、大きな差で勝ちます。時々、新しい追加は「誤機能」です。

8
technosaurus

Array.map@ Bergi の矢印関数と同等( を参照)[〜#〜] mdn [〜#〜]Array.map)の詳細

var obj  = {a:'foo', b:[1,2,3], c:null, z:55}
   ,nwarr = Object.keys(obj).map( function (k) {return obj[k];} );
3
KooiInc

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]
3
Despertaweb