繁体   English   中英

过滤类似数组的对象

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM