在数组上调用forEach时出错

时间:2015-04-01 15:55:48

标签: javascript node.js foreach

我在anoter 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

1 个答案:

答案 0 :(得分:1)

我认为这里的问题是你可以为你的arrTerms分配undefined(当结果[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
        });
     });
    }
});