Преобразование объекта в массив с использованием функций ES6
Учитывая объект javascript, как его преобразовать в массив в ECMAScript-6?
Например, данный:
var inputObj = {a:'foo', b:[1,2,3], c:null, z:55};
Ожидаемый результат:
['foo', [1,2,3], null, 55]
Порядок элементов в результате для меня не важен.
Ответы
Ответ 1
Используйте (ES5) Array::map
над keys
с функцией arrow (только для краткого синтаксиса, а не для функции):
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.
Ответ 2
Это может быть достигнуто с помощью синтаксиса 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 ]
Ответ 3
просто используйте Object.values
Object.values(inputObj); // => ['foo', [1,2,3], null, 55]
Ответ 4
Мне нравится старый школьный путь:
var i=0, arr=[];
for (var ob in inputObj)
arr[i++]=ob;
Старая школа выигрывает jsperf test с большим отрывом, если не вверх. Иногда новые дополнения являются "неправильными".
Ответ 5
Array.map
эквивалент функции @Bergi arrow (см. 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];} );