我正在尝试学习JS,并且对reduce()有一些疑问 我想知道如何知道此函数需要哪些参数以及应该如何调用它们。
此参数是否与函数外部的任何数据或数组连接。
或此参数提议仅可在回调的此本地上下文中用作const,并能够存储一些日期以正确执行.reduce()。
谢谢您的时间
只是想了解.reduce()
const companies= [
{name: "Company One", category: "Finance", start: 1981, end: 2004},
{name: "Company Two", category: "Retail", start: 1992, end: 2008},
{name: "Company Three", category: "Auto", start: 1999, end: 2007},
{name: "Company Four", category: "Retail", start: 1989, end: 2010},
{name: "Company Five", category: "Technology", start: 2009, end: 2014},
{name: "Company Six", category: "Finance", start: 1987, end: 2010},
{name: "Company Seven", category: "Auto", start: 1986, end: 1996},
{name: "Company Eight", category: "Technology", start: 2011, end: 2016},
{name: "Company Nine", category: "Retail", start: 1981, end: 1989}
];
const totalYears = companies.reduce((total, company) => total + (company.end - company.start), 0);
console.log(totalYears);
答案 0 :(得分:0)
它们仅在回调内部可用,但是显然它们不是常量,因为total
随每个刻度线而变化。 reduce
如下所示:
total
,但此名称完全是任意的),0和一个元素:对象(company
),其中,除其他外,开始= 1981和结束=2004。该函数返回total + company.end - company.start
的值(0 + 2004-1981)。
2a。回调返回的值成为累加器的新值。现在是23。{ start: 1992, end: 2008 }
作为当前元素。其他所有步骤均如上所述。...
最后一个滴答:最后一次执行回调所返回的值是companies.reduce(/*...*/)
表达式的返回值。
答案 1 :(得分:0)
reduce
的参数与数组有关。这是一个简单的重写,以显示正在发生的事情:
companies.reduce((total, company) => total + (company.end - company.start), 0);
也可以表示为:
//first parameter to the callback
let total;
//value supplied as the second parameter to `.reduce()`
total = 0;
//the second parameter to the callback
for(let company of companies) { //this is the loop `.reduce` does for you
//this variable does not show up in your code but is here for clarity
let temp;
//this is the body of your `.reduce()` callback
temp = total + (company.end - company.start)
//this would be `reduce` handing `total` to the next invocation
total = temp;
}
这是一个简化,但是可以用来了解正在发生的事情。
您定义的参数可以任意命名,但它们具有相同的用途
total
)通常称为“累加器”-这是一个通用术语,坦率地说,起初非常令人困惑,但是它所做的只是返回 last 结果。因此,如果您尝试对数组的所有成员求和,则这可能是您的运行总数,如果您尝试查找最小的项,则可能仅包含当前的最小项。 company
)通常也称为“ item”。只是执行回调的 current 项。值得注意的是,回调函数也被调用带有更多的参数。是否使用它们取决于您-很多时候不需要它们:
const sample = ["h", "e", "l", "l", "o"];
//a simple concatenation to illustrate how the parameters work
const output = sample.reduce((accumulator, item, index, array) => {
console.log(accumulator, item, index, array);
return accumulator + item;
})
console.log("output is:", output);
.reduce()
的第二个参数(在您的情况下为0
)是累加器的 starting 值(或{ {1}})。并非严格要求使用它,但在许多情况下它很有用-您通常要从 some 值开始。如果不提供此参数,则第一次运行total
时,它将从数组中的 second 值开始,并将累加器设置为第一个:
.reduce()
let run = 1;
//no initial value set
["a", "b", "c"].reduce((accumulator, item) => {
console.log(run++, accumulator, item);
})