我的目标是这样的:滤镜阵列状物体
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