如果我有數組:如何訪問javascript對象的多個屬性?
my_array = [{a:3,b:4,c:7},{a:5,b:8,c:6}]
property_names = ["a","c"]
如何使用property_names陣攻擊my_array得到下面的輸出?:
subset_array = [[3,7],[5,6]]
如果我有數組:如何訪問javascript對象的多個屬性?
my_array = [{a:3,b:4,c:7},{a:5,b:8,c:6}]
property_names = ["a","c"]
如何使用property_names陣攻擊my_array得到下面的輸出?:
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更新了他的問題]
使用o.a
和o.c
- 沒有魔法參與,也沒有傷害小貓!
您也可以使用[]
語法:o['a']
和o['c']
- 但通常只有當您要訪問一個動態屬性名稱(即一個變量,而不是[]
內引號字符串)
如果你想與這兩個值的數組:
var a_and_c = [o.a, o.c];
現在你可以使用a_and_c[0]
和[1]
訪問這兩個值。
您可以通過兩種表示法訪問屬性:
無論o.a
和o.c
或o['a']
和o['c']
。
編輯
如果你想創建一個包含兩個值的新數組,然後就這樣做使用,例如,通過@Reid建議代碼:
[o.a, o.c]
2nd編輯
因此,只需在map
函數中構建您的陣列,如下所示:
var filter = [「a」,「c」,「f」,「zzz」]; //應該
subset_array = 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)
要點:
values
,例如例如,這可以被擴展爲添加不同的「排除」規則。它也可以適應不同的高階函數。
快樂編碼。
爲了得到更好的答案,你應該提供更多的上下文:爲什麼你需要一個數組元素的子集,以及如何確定所需的屬性? – Sirko
好吧,對不起,我不清楚。 – nachocab
@nachocab更新帖子本身。 – 2012-05-14 14:50:41