我怎样才能提取一个JavaScript对象的属性值到数组中?

给定一个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"}] 
 var dataArray = new Array; for(var o in dataObject) { dataArray.push(dataObject[o]); } 
 var dataArray = Object.keys(dataObject).map(function(k){return dataObject[k]}); 

使用下划线 :

 var dataArray = _.values(dataObject); 

用jQuery,你可以这样做 –

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

演示

ES6版本:

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

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

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

并最终有dataArray填充内部对象。

使用接受的答案,并知道在ECMAScript 2017草稿中提出了Object.values() ,您可以使用方法扩展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; } } 

[事实certificate,我的答案与@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"}] 

也许有点冗长,但强大和快速

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

ES2017:

 var dataObject = { object1: { id: 1, name: "Fred" }, object2: { id: 2, name: "Wilma" }, object3: { id: 3, name: "Pebbles" } }; var valuesOnly = Object.values(dataObject); console.log(valuesOnly) 

如果你使用d3。 你可以做d3.values(dataObject) ,它会给

在这里输入图像说明