【问题标题】:Error calling forEach on array在数组上调用 forEach 时出错
【发布时间】:2015-04-01 15:55:47
【问题描述】:

我在另一个 forEach 函数中遇到了问题:

results 变量包含如下对象:

{
    names: [
        'Someone',
        'Someone else'
    ],
    emails: [
        'someone@someemail.com'
        'something@somemail.com'
    ]
}

我希望它展开所有数组并生成这样的数组:

[
    {term: 'Someone', type: 'names'},
    ...
]

这是我的代码:

var keys = _.keys(results);

console.log(keys);

var finalResult = [];

keys.forEach( function (key) {

    var arrTerms = results[key];

    console.log(key, arrTerms); //arrTerms prints fine

    arrTerms.forEach(function (term) { //This line throws an exception

        finalResult.push({
            term: term,
            type: key
        });
    });

});

对 forEach 的嵌套调用会引发以下异常:

TypeError: Uncaught error: Cannot call method 'forEach' of undefined

我尝试使用 for 循环迭代直到长度,但它产生了另一个异常:

TypeError: Uncaught error: Cannot read property 'length' of undefined

【问题讨论】:

  • 试试,console.log(key, arrTerms, Array.isArray(arrTerms));
  • 代码对我来说很好用(除了您在数组定义中缺少逗号)。 results 到底长什么样子?
  • 它将 typeOf 打印为 Object
  • @ZeMoon 对不起,试试Array.isArray。我编辑了评论
  • @thefourtheye Array.isArray(arrTerms) 返回true

标签: javascript node.js foreach


【解决方案1】:

我认为这里的问题是您可能会将 undefined 分配给您的 arrTerms(当 results[key] 返回 undefined 时,您会使用对象中不包含的键)。尝试这样做:

var keys = _.keys(results);

console.log(keys);

var finalResult = [];

keys.forEach( function (key) {
    if(results[key] != undefined){
     var arrTerms = results[key];

     arrTerms.forEach(function (term) { //This line throws an exception
        console.log(key, arrTerms); //arrTerms prints fine
        finalResult.push({
            term: term,
            type: key
        });
     });
    }
});

【讨论】:

  • 那么,如果results[key]undefinedattTerms 会发生什么?
  • 什么都没有。 :) 如果找不到钥匙,我们什么都不想做,不是吗?
  • 但是即使results[key] 未定义,你仍然在调用arrTerms.forEach
  • 哦,看到了 :) ty
  • @ZeMoon:_.keys,就像Object.keys一样,会获取对象的所有属性名。所以如果你有{foo: undefined},那么你就会得到['foo']。所以看来,毕竟,您没有发布对象的实际结构:P 我想知道为什么没有抓住这一点,因为您已经调用了 console.log(keys);
猜你喜欢
  • 2018-03-30
  • 2022-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多