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函数及其应用。
答案 0 :(得分:1)
我同意大多数其他评论,你应该更多地搜索并做自学。 但是,我知道有时很难找到有关工作原理的确切信息。如此不好向你解释这一点。
现在来看你的代码。
https://jsfiddle.net/Peripona/ppd4L9Lz/
它包含一个数组数组,您最后会在其中创建一个结果数组,其中包含来自所有子数组的最高或最低值元素。
像你一样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()来获取排序值
你会期待这样的东西......作为输出 &#34; [-21,-2,0,1,3,7,11,13,17,20,34]&#34;
但相反,你会得到像这样的输出..
" [-2, -21, 0, 1, 11, 13, 17, 20, 3, 34, 7] "
现在你想知道......为什么这种奇怪的行为以及无论如何对我的问题有什么影响..
这很重要..
因为这是你需要做的才能获得正确的输出.. 编写sort函数的方式也必须适用于String和其他类型。因此,在对sort进行比较时,它们会将数据转换为其他格式。
总而言之,如果您在内部传递一个函数并指定您需要按升序排列a-b .. 降序是b-a .. ar.sort(function(a,b){return 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
所以这个函数将采用多维数组,其中每个数组包含一些数字,这个函数将使你从所有这些数组中获得最高...
我希望这能解释一切。
答案 1 :(得分:0)
Reduce函数允许您遍历数组中的每个项目,在这种情况下,您将能够看到以前的数组值和当前数组值:
a =之前的值, b =当前值,
- (不在那里) -
i =指数, currArray =你正在使用的数组。
并在您的代码中进行比较并返回前一个值是否大于或等于当前值。
a >= b ? a : b;
条件(三元)算子是(条件?做这个:或者这个) - &gt;把它想象成if语句 如果(a> = b){ 回来一个 }其他{ 返回b }
请参阅Conditional (ternary) Operator
你的&#39; arr&#39;可以是多维数组。例如在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]。
我希望这会有所帮助。
答案 2 :(得分:0)
JS reduce方法应用于两个数组值,并根据定义的条件将数组(a和b)的这两个值减少为一个(c)(返回c = a + b)。 在这种情况下,条件是两者之间的条件更大(a> b?a:b)。