【问题标题】:Walking through the object that contains arrays遍历包含数组的对象
【发布时间】:2014-06-30 03:25:40
【问题描述】:

这是我的 javascript 对象。

var myobj = {
'arr1': ['abc','dsf2','ss4'],
'arr893f': ['839f','mdo9','ks92','kcm8'],
 ....
}

如何遍历该对象内部的所有数组值? IE。我需要走过'abc','dsf2','ss4', '839f','mdo9','ks92', ...

我可以走过去

for (var value in myobj ) {
  console.log(value);//arr1, arr893f
}

但这仍然不是我需要的。 我需要通过对象将'abc','dsf2','ss4', '839f','mdo9','ks92', ... 输入控制台。

附:只有这个对象的结构是已知的。我们不知道键名或值。

谢谢。

【问题讨论】:

    标签: javascript loops object for-loop


    【解决方案1】:
    for(var propName in myobj)
    {
        if(myobj.hasOwnProperty(propName)){
            var item = myobj[propName];
            if(item instanceof Array)
            {
                item.forEach(function(arrItem, index){
                    //woo!
                });
            }
        }
    }
    

    我认为在Object.prototype 上创建一个方便的方法可能很有用:

    (function(){
        function enumerateProperties(cbHandler, ownProperty){
            ownProperty = typeof(ownProperty) == "boolean" ? ownProperty : true;
            if(typeof(cbHandler) != "function"){
                throw new Error("invalid callback");
            }
            for(var propName in this){
                if((!ownProperty) || this.hasOwnProperty(propName)){
                    cbHandler(propName, this[propName]);            
                }
            }
        }
        Object.prototype["enumerateProperties"] =
              Object.prototype["enumerateProperties"] || enumerateProperties;
    })();
    

    所以现在你可以:

    var o = {a:1, b:[1, 2, 3], c:3};
    
    o.enumerateProperties(function(propName,propValue){
        console.log(propName);
        if(propValue instanceof Array){
            console.log(propValue.join(", "));
        }
        else{
            console.log(propValue);
        }
    });
    

    【讨论】:

    • 对数组调用的typeof将返回'object',请尝试检查长度。
    • 您是否错过了结束语“)”?谢谢。
    • 是的。对不起@Haradzieniec。
    • @Haradzieniec:我添加了一些额外的内容。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多