[英]Filter Array-like Object
我的对象看起来像这样:
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。 忘记提及我正在Google Apps脚本中执行此操作,这意味着没有外部库(也没有DOM)
-建议的解决方案1
var vControlDef = Object.keys(aryControlDef).filter(function(key) {
return aryControlDef[key][2] == sAtt;
});
引发非描述性Google服务器错误“很抱歉,发生服务器错误。请稍候,然后重试。”。
这可能会有所帮助。
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'
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.