Если вы не используете результат, 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;
}
});