Как я могу извлечь значения свойств объекта JavaScript в массив? - PullRequest
57 голосов
/ 12 ноября 2009

Учитывая объект JavaScript:

var dataObject = {
   object1: {id: 1, name: "Fred"}, 
   object2: {id: 2, name: "Wilma"}, 
   object3: {id: 3, name: "Pebbles"}
};

Как эффективно извлечь внутренние объекты в массив? Мне не нужно поддерживать дескриптор объекта [n] ID.

var dataArray = [
    {id: 1, name: "Fred"}, 
    {id: 2, name: "Wilma"}, 
    {id: 3, name: "Pebbles"}]

Ответы [ 12 ]

70 голосов
/ 06 марта 2014
var dataArray = Object.keys(dataObject).map(function(k){return dataObject[k]});
61 голосов
/ 12 ноября 2009
var dataArray = new Array;
for(var o in dataObject) {
    dataArray.push(dataObject[o]);
}
25 голосов
/ 14 октября 2015

Версия ES6:

var dataArray = Object.keys(dataObject).map(val => dataObject[val]);
22 голосов
/ 04 апреля 2014

Использование подчеркивание :

var dataArray = _.values(dataObject);
14 голосов
/ 24 мая 2013

С помощью jQuery вы можете сделать это следующим образом -

var dataArray = $.map(dataObject,function(v){
     return v;
});

Демо

6 голосов
/ 06 августа 2017

ES2017 с использованием Object.values:

const dataObject = {
    object1: {
        id: 1,
        name: "Fred"
    },
    object2: {
        id: 2,
        name: "Wilma"
    },
    object3: {
        id: 3,
        name: "Pebbles"
    }
};

const valuesOnly = Object.values(dataObject);

console.log(valuesOnly)
6 голосов
/ 30 марта 2016

Используя принятый ответ и зная, что Object.values ​​() предлагается в ECMAScript 2017 Draft , вы можете расширить Object с помощью метода:

if(Object.values == null) {
    Object.values = function(obj) {
        var arr, o;
        arr = new Array();
        for(o in obj) { arr.push(obj[o]); }
        return arr;
    }
}
6 голосов
/ 12 ноября 2009

Предполагая, что ваш dataObject определен так, как вы указали, вы делаете это:

var dataArray = [];
for (var key in dataObject)
    dataArray.push(dataObject[key]);

И в итоге dataArray заполняется внутренними объектами.

4 голосов
/ 19 января 2016

[Оказывается, мой ответ похож на @Anonymous, но я держу свой ответ здесь, поскольку он объясняет, как я получил свой ответ].

Исходный объект имеет ТРИ свойства (т. Е. 3 ключа и 3 значения). Это говорит о том, что мы должны использовать Object.keys() для преобразования его в массив с 3 значениями.

var dataArray = Object.keys(dataObject);
// Gives: ["object1", "object2", "object3" ]

Теперь у нас есть 3 значения, но не 3 значения, которые мы ищем. Итак, это предполагает, что мы должны использовать Array.prototype.map().

var dataArray = Object.keys(dataObject).map(function(e) { return dataObject[e]; } );
// Gives: [{"id":1,"name":"Fred"},{"id":2,"name":"Wilma"},{"id":3,"name":"Pebbles"}]
3 голосов
/ 22 июня 2015

Возможно, немного многословно, но надежно и быстро

var result = [];
var keys = Object.keys(myObject);
for (var i = 0, len = keys.length; i < len; i++) {
    result.push(myObject[keys[i]]);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...