在js中使用if语句将字段添加到对象

时间:2018-08-31 11:46:42

标签: javascript object if-statement

我正在尝试将大量对象整合为单个对象,但是我的if语句彼此替换:

const obj = [];
res.map((el) => {
    if (el.resource.name === "FORM01" && el.name === "cost.ttl") {
        obj[el.resource.name] = { [el.name]:  el };
    }
    if ( el.resource.name === "FORM01" && el.name === "cost.use") {
        obj[el.resource.name] = { [el.name]:  el };
    }
});

结果是我要添加

obj[el.resource.name] = {}

两个字段,例如cost.ttlcost.use

3 个答案:

答案 0 :(得分:1)

如果您不使用结果,那么map不是循环遍历数组的正确工具。同样,如果要将字符串映射到值(el.resource.name映射到对象),则数组不是要使用的正确对象类型。只需使用普通对象或Map

两个分配有冲突的原因是,条件第二次为真时,它将覆盖分配给您的第一个对象。而是创建一个对象,然后根据需要将每个属性添加到 same 对象。

尚不清楚您真正想要的最终结果是什么,但也许是这样的:

const obj = {};       // *** Object, not array
res.forEach((el) => { // *** forEach, not map
    if (el.resource.name === "FORM01" && (el.name === "cost.ttl" || el.name === "cost.use")) {
        // *** Get the existing object if any; create and store a new one if there isn't already one there
        const entry = obj[el.resource.name] = obj[el.resource.name] || {};
        // *** Add this property to it
        entry[el.name] = el;
    }
});

或者您可以使用for-of

const obj = {};
for (const el of res) {
    if (el.resource.name === "FORM01" && (el.name === "cost.ttl" || el.name === "cost.use")) {
        const entry = obj[el.resource.name] = obj[el.resource.name] || {};
        entry[el.name] = el;
    }
});

答案 1 :(得分:0)

尝试关注

const obj = {}; // Initialize here to an object instead of array
res.map((el) => {
    if (el.resource.name === "FORM01" && (el.name === "cost.ttl" || el.name === "cost.use")) {
        // Check for existing object, else create new object
        obj[el.resource.name] = obj[el.resource.name] || {};
        obj[el.resource.name][el.name] = el; // set the value in object
    }
});

注意Array.map在这里不是用于迭代的正确选择,因为您试图遍历数组并获取条件值并将其存储。您可以使用简单的for循环,也可以使用forEach

答案 2 :(得分:0)

避免连续使用两个(req, res) => { let module = require('./modules/' + req.body.moduleName + '/index.js'); res.send(module.process(req.body.inputParams)); } 语句,因为第一个可能影响第二个所测试的数据。

此外,if应该是对象,而不是数组。

也请使用obj,而不要使用.forEach,因为您不会从循环中返回任何内容。

.map