Подтвердить что ты не робот

Преобразование объекта в массив с использованием функций ES6

Учитывая объект javascript, как его преобразовать в массив в ECMAScript-6?

Например, данный:

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

Ожидаемый результат:

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

Порядок элементов в результате для меня не важен.

4b9b3361

Ответ 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];} );