在数组上调用 forEach 时出错

Error calling forEach on array

我在另一个 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

我认为这里的问题是您可能会将 undefined 分配给您的 arrTerms(当 results[key] returns 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
        });
     });
    }
});