【问题标题】:forEach not working when for loop does with an array of objects当 for 循环处理对象数组时,forEach 不起作用
【发布时间】:2013-03-28 14:20:05
【问题描述】:

我有一个这样的数组

var updates = [];

然后我像这样将东西添加到数组中

updates["func1"] = function () { x += 5 };

当我使用 for 循环调用函数时,它按预期工作

for(var update in updates) {
     updates[update]();
}

但是当我使用 forEach 时它不起作用!?

updates.forEach(function (update) {

    update();
});

forEach 绝对可以在我的 google chrome 浏览器中运行,我做错了什么?

【问题讨论】:

    标签: javascript arrays function for-loop foreach


    【解决方案1】:

    forEach 迭代 indexes 而不是 properties。你的代码:

    updates["func1"] = "something";
    

    将属性添加到对象——顺便说一句是数组——而不是数组的元素。 其实就相当于:

    updates.func1 = "something";
    

    如果您需要类似 hashmap 的东西,那么您可以使用普通对象:

    updates = {};
    
    updates["func1"] = "something";
    

    然后使用for…in进行迭代,即shouldn't be used on arrays

    或者您可以使用Object.keys 检索属性并对其进行迭代:

    Object.keys(updates).forEach(function(key) {
        console.log(key);
    }); 
    

    【讨论】:

    • 谢谢你这帮助我更好地理解它,我读到我不应该使用for...in这就是我问这个问题的原因,所以感谢for...in的替代品:)
    【解决方案2】:

    您不是将项目添加到数组中,而是将对象属性添加到数组对象中。 for .. in 将返回所有属性,forEach 仅迭代数组元素。

    要添加到数组中,您可以这样做:

    updates.push(function () { x += 5 });
    

    如果您打算按照自己的方式添加,那么只需使用对象而不是数组:

    var updates = {}
    

    然后使用for ... in

    【讨论】:

      猜你喜欢
      • 2013-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-26
      • 1970-01-01
      相关资源
      最近更新 更多