我的目標是這樣的:濾鏡陣列狀物體
aryControlDef = {
'item1' : ['a','b','c'],
'item2' : ['x','y','z']
};
然而,當我把這個
var sAtt = 'z';
var vControlDef = Array.prototype.filter.call(aryControlDef, function(value) {return value[2] == sAtt});
我得到這個:
vControlDef = []
我知道這是做按鍵的類似數組的對象迭代,因爲此循環得到正確的結果:
for(var i in aryControlDef){
if(aryControlDef[i][2]=='z'){
vControlDef[aryControlDef[i][0]] = aryControlDef[i];
};
};
我所追求的是一種返回包含與sAtt匹配的屬性的對象的方法。
我無法弄清楚如何迭代回調函數中的鍵,與'for ... each'循環中可能的方式相同,Google沒有找到任何結果這種情況下使用。 TIA對於任何建議:)
- ps。忘了提,我在谷歌Apps腳本這樣做,這意味着任何外部庫(沒有DOM)
- 建議的解決方案1
var vControlDef = Object.keys(aryControlDef).filter(function(key) {
return aryControlDef[key][2] == sAtt;
});
提出了一個非描述谷歌服務器錯誤「我們很抱歉,發生服務器錯誤,請稍等一會兒,然後重試。「
得到什麼,你的「迭代在回調函數中的關鍵」的意思是相似? – Whymarrh
您試圖在非數組的東西上調用數組方法。它甚至不是一個「類似數組的對象」,它只是一個沒有類似數組特徵的對象。當然這是行不通的。你不能使用Array的方法來幫助你。你將不得不使用一個你已經提供的簡單循環。 – meagar
你的對象不是「類似數組的對象」。在JavaScript中,「類似數組」意味着您的對象必須具有數字索引的屬性和一個給出索引上限的「.length」屬性。 – Pointy