[英]Adding fields to an object with if-statement in js
我試圖將龐大的對象數組整合為單個對象,但是我的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
。
如果不使用結果,則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;
}
});
嘗試跟隨
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
。
避免連續使用兩個if
語句,因為第一個可能影響第二個所測試的數據。
另外, obj
應該是一個對象,而不是數組。
另外,請使用.forEach
而不是.map
,因為您不會從循環中返回任何內容。
const obj = {};
res.forEach( el => {
if (el.resource.name === "FORM01" && ["cost.ttl","cost.use"].includes(el.name)) {
obj["FORM01"] = { [el.name]: el };
}
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.