我怎样才能提取一个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)
,它会给