簡體   English   中英

如何訪問javascript對象的多個屬性?

[英]How to access multiple properties of a javascript object?

如果我有數組:

my_array = [{a:3,b:4,c:7},{a:5,b:8,c:6}]
property_names = ["a","c"]

如何對my_array使用property_names數組以獲取以下輸出?:

subset_array = [[3,7],[5,6]]
var my_array = [{a:3,b:4,c:7}, {a:5,b:8,c:6}];
var keys = ['a', 'c'];

my_array.map(function(d){
    return keys.map(function(k) {
        return d[k];
    });
});

這會給您[[3, 7], [5, 6]] ,似乎正是您想要的。


[過時的初步答案; 在OP更新他的問題之前]

使用oaoc不涉及魔術,不傷害小貓!

您也可以使用[]語法: o['a']o['c'] -但通常只有在您要訪問動態屬性名稱(即,變量而不是[]


如果要同時使用兩個值的數組:

var a_and_c = [o.a, o.c];

現在,您可以使用a_and_c[0][1]訪問這兩個值。

您可以通過兩種表示法來訪問屬性:

oaoco['a']o['c']


編輯

如果要創建一個包含兩個值的新數組,則只需使用@Reid建議的代碼即可:

[o.a, o.c]

第二次編輯

因此,只需在map函數內部構建數組,如下所示:

var filter = [“” a“,” c“,” f“,” zzz“]; // 應該

子集數組= my_array.map(函數(v){var newArr = [];

for( var i=0; i<filter.length; ++i ) {
  if ( typeof v[ filter[i] ] !== 'undefined' ) {
    newArr.push( v[ filter[i] ] );
  }
}

return newArr;

});

但是要注意的一件事是,只要您使用基本類型(如示例中的int值),上述代碼就會克隆屬性。 這意味着,如果您在某個時刻更改my_array中的值, subset_array 不會隱式更改,但是您也必須重新創建subset_array或在其中調整值。

這不是一個完整的答案,但是我相信它將是有用的:

var values = []
var obj = {a: 1, b: 2, c: 3}
for (var prop in obj) {
  if (obj.hasOwnValue(prop)) { // skip props in [[prototype]], no effect here
    values.push(obj[prop])
  }
}
values // -> [2, 1, 3] (in SOME UNDEFINED ORDER)

關鍵點:

  1. 迭代對象的[所有]對象屬性名稱(但不迭代[[prototype]]鏈)
  2. 從屬性名稱動態訪問值
  3. 屬性不排序 ; 例如,根據需要對values進行排序

例如,可以將其擴展以添加不同的“排除”規則。 它也可以適用於不同的高階函數。

快樂的編碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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