我正在尝试将大量对象整合为单个对象,但是我的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.ttl
和cost.use
。
答案 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