[英].reduce in lodash fucntionality
我試圖弄清楚所有三個對象是否都在優化且更少的代碼中定義。 為此,我將lodash
與reduce
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;
(如果你要使用數組和回調,使用every
為AKX指出。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.