簡體   English   中英

在兩個單獨的函數或單個函數中創建和填充 object?

[英]Creating and filling an object in two separate functions or in a single one?

我多次遇到這個問題。 問題是我有一個由鍵和值組成的元素數組,我需要將數組簡化為 object,其中包含鍵和每個鍵的值之和(例如["foo", 1], ["bar", 1], ["foo", 1]變成{foo: 2, bar: 1} )。 最好先初始化 object 並將所有鍵設置為 0,然后使用該 object 還是使用空的 object 並檢查該屬性是否每次都存在?

function juiceMapFromFormat(format) {
    return format
        .map(juiceString=>{
            const [juiceName, quantityString] = juiceString.split(/\s*=>\s*/gim);
            const quantity = +quantityString;

            return [juiceName, quantity];
        })
        .reduce((juiceMap, juiceArr)=>{
            const [juiceName, quantity] = juiceArr;
            const previousQuantity = juiceMap.get(juiceName) || 0;

            if (previousQuantity < 1000) {
                juiceMap.delete(juiceName);
            }
            juiceMap.set(juiceName, previousQuantity + quantity);

            return juiceMap;
        }, new Map());
}

這是我目前的 function。 我的示例使用 map,但這是因為問題。 我的問題是針對地圖和對象的。 我有兩個條件 - 屬性是否存在並且數量小於 1000。第二個條件是因為我正在解決的問題。 我的問題是,最好是保留它還是將果汁數組 arrays 保存在一個常數中,並用它來用每個果汁名稱初始化一個 Map 並給出 Z1D78DC8ED51214E518B5114FE24490 作為初始值的方法需要|| 0 在 juiceMap.get(juiceName) 之后。 哪個會更好?

編輯: function 采用正確映射的字符串數組。 我需要退回 map。 我的問題是我是否應該保留這兩個條件或刪除一個檢查屬性是否存在的條件,並通過預先將每個屬性初始化為 0 來確保每個屬性都存在。

編輯 2:如果我事先初始化所有屬性,我將減少圈復雜度,因為條件將被刪除。 至少我是這么理解的。

我會用一個循環廣告直接減少數據。

function juiceMapFromFormat(format) {
    return format.reduce((juiceMap, juiceString) => {
        const [juiceName, quantityString] = juiceString.split(/\s*=>\s*/gim);
        return juiceMap.set(juiceName, (juiceMap.get(juiceName) || 0) + +quantityString);
    }, new Map());
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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