JS中的附加0参数有什么作用?

时间:2019-03-14 16:57:28

标签: javascript ecmascript-6

考虑以下代码:

let reduced = inventors.reduce((a, b) => {      
      return (b.passed - b.year) + a;
}, 0);

我不明白这个额外的0意味着什么。起初,我认为这类似于设置默认值,如下所示:

let reduced = inventors.reduce((a = 0, b) => {      
      return (b.passed - b.year) + a;
}); 

但是没有用。区别在于,与第一个代码数组成功地减少了。秒返回了一些奇怪的连接字符串。

PS这是我要减少的数组(获取列表中所有发明者的寿命之和):

const inventors = [
      { first: 'Albert', last: 'Einstein', year: 1879, passed: 1955 },
      { first: 'Isaac', last: 'Newton', year: 1643, passed: 1727 },
      { first: 'Galileo', last: 'Galilei', year: 1564, passed: 1642 },
      { first: 'Marie', last: 'Curie', year: 1867, passed: 1934 },
      { first: 'Johannes', last: 'Kepler', year: 1571, passed: 1630 },
      { first: 'Nicolaus', last: 'Copernicus', year: 1473, passed: 1543 },
      { first: 'Max', last: 'Planck', year: 1858, passed: 1947 },
      { first: 'Katherine', last: 'Blodgett', year: 1898, passed: 1979 },
      { first: 'Ada', last: 'Lovelace', year: 1815, passed: 1852 },
      { first: 'Sarah E.', last: 'Goode', year: 1855, passed: 1905 },
      { first: 'Lise', last: 'Meitner', year: 1878, passed: 1968 },
      { first: 'Hanna', last: 'Hammarström', year: 1829, passed: 1909 }
    ];

那么,有人可以告诉我这个0做什么吗?

3 个答案:

答案 0 :(得分:1)

SELECT
?property
?propertyLabel
?qval
(GROUP_CONCAT(DISTINCT ?val_Label; separator="; ") AS ?val_Label) WHERE {
    ?property a wikibase:Property; wikibase:claim ?p; wikibase:statementProperty ?ps; wikibase:qualifier ?pq.
    ?property rdfs:label ?propertyLabel . FILTER (LANG(?propertyLabel) = 'en' )
    ?company ?p ?statement . ?statement wikibase:rank ?rank .
    FILTER (?rank IN (wikibase:NormalRank, wikibase:PreferredRank))
    ?statement ?ps ?value . # URI, literal or blank node
    OPTIONAL {?value rdfs:label ?valueLabel . FILTER (LANG(?valueLabel) = 'en')}
    BIND (COALESCE(?valueLabel, ?value) AS ?val_Label)
    OPTIONAL { ?statement ?pq ?qval }
} GROUP BY ?property ?propertyLabel ?qval
  VALUES (?company) {(wd:Q95)}

这被视为初始值

如果不使用数组的第一个元素,则视为初始值

Reduce -> Initial value parameter

答案 1 :(得分:0)

arr.reduce(callback[, initialValue])

initialValue可选

用作回调的第一次调用的第一个参数的值。如果未提供初始值,则将使用数组中的第一个元素。在没有初始值的空数组上调用reduce()是错误的。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce

答案 2 :(得分:-1)

在这种情况下,0代表累加器。 您可以在Google上搜索并找到MDN的详细说明。

reduce的基本用途是将一个函数作为第一个参数,将累加器作为第二个参数,并将两个值组合在一起以产生新值。

如果不传递累加器,则将数组内的第一个元素设置为默认元素。