reduce方法中的累加器是否是一个具有名为total的键的对象?

时间:2019-06-08 03:11:41

标签: javascript

我在一个初学者代码solution中遇到了一些代码,以获得一个freeCodeCamp challenge

class Student(models.Model):
    FRESHMAN = 'FR'
    SOPHOMORE = 'SO'
    JUNIOR = 'JR'
    SENIOR = 'SR'
    YEAR_IN_SCHOOL_CHOICES = [
        (FRESHMAN, 'Freshman'),
        (SOPHOMORE, 'Sophomore'),
        (JUNIOR, 'Junior'),
        (SENIOR, 'Senior'),
    ]
    year_in_school = models.CharField(
        max_length=2,
        choices=YEAR_IN_SCHOOL_CHOICES,
        default=FRESHMAN,
    )

    def is_upperclass(self):
        return self.year_in_school in (self.JUNIOR, self.SENIOR)

我了解到reduce函数中的累加器将所有值相加,但是我对用法var register = cid.reduce(function(acc, curr) { acc.total += curr[1]; acc[curr[0]] = curr[1]; return acc; }, { total: 0 }); 感到困惑-好像它是一个包含acc.total键的对象。那是怎么回事吗?

1 个答案:

答案 0 :(得分:1)

累加器的初始值是传递的第二个参数(或数组中的第一项)。由于第二个参数已在此处传递,因此累加器或acc的开头为

{ total: 0 }

累加器可以是,但是在这种情况下,是的,它是带有total键的对象。

在随后的迭代中,累加器是从回调的 last 迭代返回的值。每个回调都有return acc,因此每次迭代时累加器都是相同的对象。

该代码(几乎)等效于:

var acc = { total: 0 };
cid.forEach(function(curr) {
  acc.total += curr[1];
  acc[curr[0]] = curr[1];
});
var register = acc; // same object as accumulator