簡體   English   中英

在js中使用if語句將字段添加到對象

[英]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.ttlcost.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM