我的对象如下:
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'循环中可能的那样,而谷歌没有找到任何结果案件使用。 TIA有任何建议:)
- PS。忘了提我在Google Apps脚本中这样做,这意味着没有外部库(也没有DOM)
- 建议的解决方案1
var vControlDef = Object.keys(aryControlDef).filter(function(key) {
return aryControlDef[key][2] == sAtt;
});
引发了一个非描述性的Google服务器错误“我们很抱歉,发生了服务器错误。请稍等一下再试一次。”。
答案 0 :(得分:0)
这可能有所帮助。
var aryControlDef = {
'item1' : ['a','b','c'],
'item2' : ['x','y','z']
};
var vControlDef = [];
for (key in aryControlDef) {
if (aryControlDef.hasOwnProperty(key)) {
// So now the possible value of
// key is 'item1' / 'item2'
// aryControlDef[key] is ['a','b','c'] / ['x','y','z']
if (aryControlDef[key][2] == 'z') {
vControlDef.push(aryControlDef[key]);
}
}
}
vControlDef中的结果应该与您认为的结果相似
var vControlDef = Array.prototype.filter.call(aryControlDef, function(value) {
return value[2] == 'z'
});