簡體   English   中英

減少 JavaScript 和累加器 object 中的 function

[英]reduce function in JavaScript and the accumulator object

我有一個關於減少 function 的查詢。

代碼如下:

const marks = [60, 55, 80, 89, 90, 98, 75, 72, 50, 30, 20, 42]
const grade_count = marks.reduce(groupByGrade, {})
function groupByGrade (acc, mark) {
  
  const {a = 0, b = 0, c = 0, d = 0, f = 0} = acc;
  if (mark >= 90) {
    return {...acc, a: a + 1};
  }
  if (mark >= 80) {
    return {...acc, b: b + 1};
  }
  if (mark >= 70) {
    return {...acc, c: c + 1};
  }
  if (mark >= 60) {
    return {...acc, d: d + 1};
  }
  else {
    return {...acc, f: f + 1};
  }
}
 
console.log (marks)
console.log (grade_count)
console.log ('woo hoo')

我的查詢與以下行有關,其中累加器第一次被解構:

const {a = 0, b = 0, c = 0, d = 0, f = 0} = acc;

我想了解累加器 object 上的屬性為什么不會在marks數組的每次迭代中重置為零。

請問我在這里缺少什么?

我想了解累加器 object 上的屬性為什么不會在標記數組的每次迭代中重置為零。

因為= 0部分

const {a = 0, b = 0, c = 0, d = 0, f = 0} = acc;

...僅被解構的屬性的有效值undefined時使用(“有效”= 它實際上是undefined的,或者該屬性根本不存在)。

在對 reducer 的后續調用中, acc對這些屬性具有undefined的值,因此不使用默認值。


順便說一句,您可以在參數列表中進行解構:

function groupByGrade({a = 0, b = 0, c = 0, d = 0, f = 0}, mark) {
    // ...
}

...雖然ab和其他人將不再是常數。

暫無
暫無

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

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