![](/img/trans.png)
[英]How can I extract specific property as an array from nested array object in JavaScript
[英]How might I extract the property values of a JavaScript object into an array?
給定 JavaScript object:
var dataObject = {
object1: {id: 1, name: "Fred"},
object2: {id: 2, name: "Wilma"},
object3: {id: 3, name: "Pebbles"}
};
如何有效地將內部對象提取到數組中? 我不需要維護object[n] ID 的句柄。
var dataArray = [
{id: 1, name: "Fred"},
{id: 2, name: "Wilma"},
{id: 3, name: "Pebbles"}]
var dataArray = Object.keys(dataObject).map(function(k){return dataObject[k]});
var dataArray = [];
for(var o in dataObject) {
dataArray.push(dataObject[o]);
}
ES6版本:
var dataArray = Object.keys(dataObject).map(val => dataObject[val]);
使用下划線:
var dataArray = _.values(dataObject);
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)
假設您的 dataObject 是按照您指定的方式定義的,您可以這樣做:
var dataArray = [];
for (var key in dataObject)
dataArray.push(dataObject[key]);
並最終讓 dataArray 填充了內部對象。
使用已接受的答案並知道Object.values()是在ECMAScript 2017 草案中提出的,您可以使用方法擴展 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;
}
}
[編輯和更新我的答案。 其他答案似乎與我的幾乎重疊,但是,我認為我以前有另一個答案並提供了替代方案]。
我針對這個問題提出了 3 個解決方案,基於:
Objects.keys() 解決方案:
let keys = Object.keys(dataObject); // ["object1", "object2", "object3" ];
let keysToResult = keys.map( e => dataObject[e] ); // [{"id":1,"name":"Fred"},{"id":2,"name":"Wilma"},{"id":3,"name":"Pebbles"}]
Object.values 解決方案:
let values = Object.values(dataObject); // [{"id":1,"name":"Fred"},{"id":2,"name":"Wilma"},{"id":3,"name":"Pebbles"}]
Object.entries 解決方案:
let entries = Object.entries(dataObject); // [["object1",{"id":1,"name":"Fred"}],["object2",{"id":2,"name":Wilma"}],["object3",{"id":3,"name":"Pebbles"}]]
let entriesToResult = entries.map( ([k,v]) => v ); [{"id":1,"name":"Fred"},{"id":2,"name":"Wilma"},{"id":3,"name":"Pebbles"}]
這三種解決方案都有自己的特點。
Object.keys() 返回一個結果不足的數組。 因此,我們使用 Array.prototype.map 來填充數組中的每個值以接近我們想要的值。 通常,我們可以將 Object.keys() 與 map 結合視為一種機制,可以根據我們的需要自定義結果列表。
Object.values() 很有趣,因為它丟棄鍵並且只返回結果。 事實上,對於這個問題,這是完美的,因為答案不需要進一步處理。
Object.entries() 返回的比我們想要的更多,因為它同時返回鍵和值。 我們需要使用 map 來自定義我們的結果。 事實上,我們需要剪掉多余的信息。
Object.keys()、Object.values() 和 Object.entries() 都是非常有用的函數,這就是為什么我想展示所有 3 個作為這個問題的解決方案的原因。 根據您的特定用例,您可能會找到更適合解決問題的方法。
可能有點冗長,但強大且快速
var result = [];
var keys = Object.keys(myObject);
for (var i = 0, len = keys.length; i < len; i++) {
result.push(myObject[keys[i]]);
}
現在支持 Object.values() 方法。 這將為您提供一個對象值的數組。
Object.values(dataObject)
參考: https : //developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_objects/Object/values
我更喜歡將對象值破壞為數組:
[...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)];
這個對我有用
var dataArray = Object.keys(dataObject).map(function(k){return dataObject[k]});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.