Javascript减少函数/三元运算符

时间:2015-08-17 09:22:07

标签: javascript reduce higher-order-functions

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函数及其应用。

3 个答案:

答案 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)。