我如何将JavaScript对象的属性值提取到数组中?

时间:2009-11-11 23:17:09

标签: javascript arrays json

给定一个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"}]

14 个答案:

答案 0 :(得分:70)

var dataArray = Object.keys(dataObject).map(function(k){return dataObject[k]});

答案 1 :(得分:61)

var dataArray = new Array;
for(var o in dataObject) {
    dataArray.push(dataObject[o]);
}

答案 2 :(得分:25)

ES6版本:

var dataArray = Object.keys(dataObject).map(val => dataObject[val]);

答案 3 :(得分:22)

使用underscore

var dataArray = _.values(dataObject);

答案 4 :(得分:14)

使用jQuery,你可以这样做 -

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

Demo

答案 5 :(得分:6)

假设您的dataObject是按照您指定的方式定义的,您可以这样做:

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

最后让dataArray填充内部对象。

答案 6 :(得分:6)

使用the accepted answer并知道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;
    }
}

答案 7 :(得分:6)

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)

答案 8 :(得分:4)

[事实证明我的回答类似于@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"}]

答案 9 :(得分:3)

可能有点冗长,但强大而快速

var result = [];
var keys = Object.keys(myObject);
for (var i = 0, len = keys.length; i < len; i++) {
    result.push(myObject[keys[i]]);
}

答案 10 :(得分:1)

如果您使用d3。你可以d3.values(dataObject)做出

enter image description here

答案 11 :(得分:1)

现在支持Object.values()方法。这将为您提供一个对象值的数组。

Object.values(dataObject)

参考:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_objects/Object/values

答案 12 :(得分:0)

这个为我工作

var dataArray = Object.keys(dataObject).map(function(k){return dataObject[k]});

答案 13 :(得分:0)

我更喜欢将对象值分解为数组:

[...Object.values(dataObject)]

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

var dataArray = [...Object.values(dataObject)];