簡體   English   中英

.reduce lodash 功能

[英].reduce in lodash fucntionality

我試圖弄清楚所有三個對象是否都在優化且更少的代碼中定義。 為此,我將lodashreduce lodash使用。 但它沒有給我正確的價值。 我是否以錯誤的方式使用 reduce ?

checker1 = ((level1.test[testState.Id]['p1']['o1'] == undefined) && 
(level1.test[testState.Id]['p1']['o2'] == undefined) && 
(level1.test[testState.Id]['p1']['o3'] == undefined))
console.log('checker',checker1) //true


checker2 = _.reduce(level1.test[testState.Id] ,
                            (checker, val) => {return checker || (val == undefined)}, false)                  
console.log('checker',checker2) //false! It should be true!

使用Array.every會更容易(並且性能更高,因為它具有提前退出屬性):

const obj = level1.test[testState.Id].p1;
const checker1 = ['o1', 'o2', 'o3'].every(key => obj[key] === undefined);

您對_.reduce輸入只是level1.test[testState.Id] ,它似乎是一個非數組對象。 該代碼中的任何內容都沒有告訴_.reduce它適用於對象的.p1.o1.p1.o2.p1.o3屬性。

如果您想為此使用reduce ,我將使用本機並從一組屬性名稱開始:

checker2 = ['o1', 'o2', 'o3'].reduce(
    (checker, prop) => checker && level1.test[testState.Id].p1 === undefined,
    false
);

...以優化且更少的代碼

reduce不會做這些事情中的任何一件。 它需要創建一個數組和多個函數調用。 反而:

const obj = level1.test[testState.id].p1;
checker = obj.o1 === undefined && obj.o2 === undefined && obj.o3 === undefined;

(如果要使用數組和回調,使用everyAKX指出。)

暫無
暫無

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

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