使用js中的if语句向字段添加字段

问题描述 投票:0回答:3

我试图将大量的对象聚合到单个对象,但我的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这样的两个领域。

javascript object if-statement
3个回答
1
投票

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

两个赋值冲突的原因是第二次条件为真时,它会覆盖您指定的第一个对象。而是创建一个对象,然后根据需要将每个属性添加到同一个对象。

目前尚不清楚你真正想要的最终结果,但也许是这样的:

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;
    }
});

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


0
投票

连续避免使用两个if语句,因为第一个语句可能会影响第二个语句测试的数据。

此外,obj应该是一个Object,而不是一个Array。

另外,使用.forEach,而不是.map,因为你没有从循环中返回任何东西。

const obj = {};
res.forEach( el => {
    if (el.resource.name === "FORM01" && ["cost.ttl","cost.use"].includes(el.name)) {
        obj["FORM01"] = { [el.name]:  el };
    }
});
© www.soinside.com 2019 - 2024. All rights reserved.