簡體   English   中英

如何將 JavaScript object 的屬性值提取到數組中?

[英]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);

使用 jQuery,你可以這樣做 -

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

演示

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 個解決方案,基於:

  • 對象.keys
  • 對象值
  • 對象條目

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

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

在此處輸入圖片說明

我更喜歡將對象值破壞為數組:

[...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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM