function largestInEach(arr) {
var resultArray = [],
highestValue = 0;
for (var i = 0; i < arr.length; i++) {
highestValue = arr[i].reduce(function(a, b){
return a >= b ? a : b;
});
resultArray.push(highestValue);
}
return resultArray;
}
有人能解释一下这个代码吗?
其余的代码对我来说非常清楚,但是我很难理解reduce函数及其应用。
我同意大多数其他评论,你应该更多地搜索和自我学习。然而,我知道有时很难找到事物如何工作的确切信息。我来给你们解释一下。
现在来看你的代码。
https://jsfiddle.net/Peripona/ppd4L9Lz/
它包含一个数组的数组,您在最后创建一个结果数组,其中包含所有子数组中值最高或值最低的元素。
like you got
var arry = [[1,2,3],[2,3,4],[20,-2,3]]
用外行的话来说……你得到一个数组如果你对一个整数数组进行排序或约简,它可能并不总是生成你想要的例如,如果你有这个数据
var ar = [1,3,34,11,0,13,7,17,-2,20,-21]
如果你使用普通的ar.sort()来获得排序值
你会期望这样的事情…作为输出" [-21, -2, 0, 1, 3, 7, 11,13,17,20,34] "
,但相反,你会得到这样的输出…
" [-2, -21, 0, 1, 11, 13, 17, 20, 3, 34, 7] "
现在你想知道…为什么会有这种奇怪的行为?这对我的问题有什么关系?
It Does matter..
因为这是你需要做的,以获得正确的输出。sort函数的编写方式也必须适用于String和其他类型。所以他们在做排序比较时把数据转换成其他格式。
所以总而言之,如果你在内部传递一个函数并指定你需要升序的a-b..降序是b-a。ar.sort(函数(a, b){返回a - b;})
接下来是Reduce,这个函数接受一个函数参数,并从数组中得到最高或最低的值。
因此,如果你……
ar.reduce(function(a,b){return a>=b ? b : a})
将给你-21作为输出。
如果你做了
ar.reduce(function(a,b){return a>=b ? a : b})
它会给你:34
所以这个函数将采用多维数组,每个数组包含一些数字,这个函数将从所有这些数组中获得最高的数字。
我希望这说明了一切
Reduce函数允许您遍历数组中的每个项,在这里您将能够看到先前的数组值和当前数组值,在您的示例中:
a =前一个值,B =当前值,
-(不在这里)-
i = index,currArray =当前使用的数组
,在你的代码中,如果你的前一个值大于或等于当前值,你将比较和返回。
a >= b ? a : b;
条件(三元)操作符是(条件?)do this: or this) ->把它想象成if语句如果(a>= b){返回一个其他}{返回b}
参见条件(三元)运算符
你的'arr'也可以是多维数组。在http://plnkr.co/edit/?p=preview
上尝试以下代码按f12打开开发人员工具,然后在控制台查看结果。
var arr = [[1,2],[4,3],[5,23,52]];
var resultArray = [],
var highestValue;
for (var i = 0; i < arr.length; i++) {
highestValue = arr[i].reduce(function(a, b){
return a >= b ? a : b;
});
resultArray.push(highestValue);
}
console.log(resultArray);
你的结果数组包含[2,4,52]。
JS reduce方法对数组的两个值应用,并根据定义的条件(return c = a+b)将数组(a和b)的这两个值约简为一个(c)。在你的例子中,条件是两个中哪个更大(a>b?a:b)。