过滤类似数组的对象

时间:2014-07-13 16:18:13

标签: javascript arrays

我的对象如下:

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服务器错误“我们很抱歉,发生了服务器错误。请稍等一下再试一次。”。

1 个答案:

答案 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'
});