Lodash使用if语句创建JSON嵌套forEach

时间:2016-01-15 08:15:18

标签: javascript json node.js lodash

我正在尝试使用另一个的属性创建一个JSON对象。我正在使用一系列嵌套for循环,尝试发现每个field.name的内容,然后创建一个新对象job.id并指定field.data的值。这是我到目前为止所拥有的;

_.forEach(records, function(record) {
    _.forEach(record.field, function(field) {
        if(field.name === "ID") {
            job.id = field.data;
        }
        if(field.name === "JobNumber") {
            job.job_number = field.data;
        }
        jobs.push(job);
    });
});
output.push(jobs.concat());

但是我的输出如下

{
    "id": "a-long-job-id",
    "job_number": "fourcharacterjobnumber"
},
{
    "id": "sameasabove",
    "job_number": "sameasabove"
},
{
    "id": "sameasabove",
    "job_number": "sameasabove"
}, ...

似乎发生的事情是阵列没有被更新,所以对此的任何帮助都会非常感激。

注意我希望将其转换为一个函数,以便传入配置对象和if(field.name === "ID"),我希望使用if(field.name === config[field.name])

提前致谢:)

1 个答案:

答案 0 :(得分:1)

从您显示的代码看来,您似乎在所有迭代中使用相同的作业对象。因此,在所有迭代中只有一个作业对象正在更新并被推送到作业数组。尝试创建一个新的作业对象并将其推送到外部循环中的作业数组。

我假设你在第一次forEach之前定义了jobs数组。

_.forEach(records, function(record) {
    var job = {}; // new object
    _.forEach(record.field, function(field) {
        if(field.name === "ID") {
            job.id = field.data;
        }
        if(field.name === "JobNumber") {
            job.job_number = field.data;
        }
    });
    jobs.push(job); // moved out
});
output.push(jobs.concat());