Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/469.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么reduce不打印第一个值?_Javascript - Fatal编程技术网

Javascript 为什么reduce不打印第一个值?

Javascript 为什么reduce不打印第一个值?,javascript,Javascript,我正在尝试学习如何在这里使用reduce,这将只记录b、c、d ['a', 'b', 'c', 'd'].reduce(function(acc, cur){ console.log(cur); return cur; }) 我也不明白累加器是什么。即使在阅读了文档之后,我也不知道这是如何工作的 Current似乎不是Current,因为跳过了'a' 编辑:以下是一组更好的测试用例: 第一次中的第一个参数是[0],第二个是[1] 在second时间中,第一个参数是f([0],[1])

我正在尝试学习如何在这里使用reduce,这将只记录
b、c、d

['a', 'b', 'c', 'd'].reduce(function(acc, cur){
  console.log(cur);
  return cur;
})
我也不明白累加器是什么。即使在阅读了文档之后,我也不知道这是如何工作的

Current
似乎不是
Current
,因为跳过了
'a'

编辑:以下是一组更好的测试用例:


第一次中的第一个参数是[0],第二个是[1]


second时间中,第一个参数是f([0],[1]),第二个参数是[2],等等reduce的要点是它从数组中获取连续的元素对,对该对执行一个操作,然后将该操作的结果(累加器)作为下一次的左操作数

也就是说,给定
[a,b,c,d].reduce(f)
,它会:

   f(a, b)
-> f(f(a, b), c)
-> f(f(f(a, b), c), d)
您只记录了第二个参数,因此您的
a
永远不会出现

(为了方便起见,我忽略了传递给
f
的额外
索引
数组
参数)

如果要使用数组中第一个元素以外的其他元素作为第一个左操作数,则使用尚未提供的可选“initial value”参数。如果您没有提供,那么,正如您所发现的,
acc
cur
的第一个值将是
“a”
“b”

reduceRight
函数从数组的另一端获取参数:

   f(c, d)
-> f(b, f(c, d))
-> f(a, f(b, f(c, d)))
如上所述

reduce()方法对累加器和数组中的每个元素(从左到右)应用一个函数,将其减少为单个值

这清楚地表明

['a', 'b', 'c', 'd'].reduce(function(acc, cur){
  console.log(cur);
  return cur;
})
reduce每次给出的acc值为
a、b、c
cur
b、c、d

['a', 'b', 'c', 'd'].reduce(function(acc, cur){
  console.log(cur);
  return cur;
})

根据的API,每次您获得的成对值为
a,b
b,c
c,d
,如果累加器不应是第一个元素,则需要指定
初始值

初始值

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

['a',b',c',d'].reduce(函数(acc,cur){
控制台日志(cur);
返回电流;
},未定义);

//^^^^^^^^
当我看到真实世界的示例时,我更容易理解事情,所以假设我们有这样一个数组:

let products = [
    { label: 'Product 1', price: 5  },
    { label: 'Product 2', price: 15 },
    { label: 'Product 3', price: 20 },
];
然后我们要计算总价格:

let totalPrice = products.reduce((acc, product) => {
    return acc + product.price;
}, 0); // 0 - initial value

console.log(totalPrice);
并且它不会记录
a
,因为如果没有指定初始值,它将以第一个元素作为初始值。

例如

['a', 'b', 'c', 'd'].reduce(function(acc, cur){
  console.log(acc);
  return acc+cur;
})
您将获得以下信息:

ab
abc
abcd
reduce()一次获取数组中的一个元素,并根据回调函数生成一个输出,并将其存储在累加器中。因此,对于每一次迭代,您都有上一个结果(累加器)和当前元素来生成下一个结果。累加器值从数组中第一个元素的值开始