Javascriptオブジェクトが与えられた場合、ECMAScript-6で配列に変換するにはどうすればよいですか?
たとえば、次の場合:
var inputObj = {a:'foo', b:[1,2,3], c:null, z:55};
予想される出力は次のとおりです。
['foo', [1,2,3], null, 55]
結果の要素の順序は重要ではありません。
使用(ES5) Array::map
keys
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 はありません。
Object.values を使用するだけです
Object.values(inputObj); // => ['foo', [1,2,3], null, 55]
これは 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 ]
私は古い学校の方法が好きです:
var i=0, arr=[];
for (var ob in inputObj)
arr[i++]=ob;
古い学校は、 jsperf test に勝ち目がなければ、大きな差で勝ちます。時々、新しい追加は「誤機能」です。
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];} );
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]