之前一直没有认认真真地学习JavaScript(https://en.wikipedia.org/wiki/ECMAScript),因为一直只是将它作为在Web中进行编程,进行动态效果呈现的一个辅助脚本(我用jQuery比较多,还用过一段时间的Dart)。
这两天因为脚扭了在家里休息了几天,随手拿起《Eloquent JavaScript》就看几段,就顺手学习了一下JavaScript中的reduce。
完整的说明在这里。
按照定义,reduce对一个数组中的每个元素进行一个类似于“累加”的操作,将其规整到一个单一值。 它的完整语法如下:
arr.reduce(callback[, initialValue])
而其中的callback函数,又可以最多有四个参数:
- previousValue
- currentValue
- index
- array
我们先看一个对数组中所有元素求和的例子:
var total = [0, 1, 2, 3].reduce(
function(sum, current) {
return sum+current;
});
// total == 6
这是一个非常直观的例子。 计算机程序求和总是用一个循环的方式。所以,“和”会保存在一个变量中,然后顺序一个元素一个元素的相加。
注意,由于我们没有给出initialValue,所以在第一次运行时,sum(作为previousValue)就会取数组的第一个数值0,而此时的currentValue就会是数组的第二个元素1。在这个程序中,这么做当然是没有问题的。 我们可以将这个程序等价地写作:
var total = [0, 1, 2, 3].reduce(
function(sum, current) {
return sum+current;
}, 0);
// total == 6
此时我们显式地给予初始值为0(求和当然是如此),得到的结果是一致的。
第二个例子是将多维数组“压扁”成一维数组。这也可以用reduce来完成。
var arr=[[1,2,3],[4,5],[6,1]];
var x=arr.reduce(
function(flat, current)
{
return flat.concat(current);
}, [])
);
这里必须给定initialValue。
本文收录于[go4pro.org]
Leave a Reply