Javascript 减少 function/ternary 运算符

Javascript reduce function/ternary operator

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函数和它的应用理解起来有点吃力。

Reduce 函数允许您遍历数组中的每个项目,您可以在其中查看先前的数组值和当前数组值,在您的例子中:

a = previous value, b = current value,

-(不在里面)-

i = index, currArray = the array you are working with.

并且在您的代码中,如果您的先前值大于或等于当前值,则您正在比较和 returning。

a >= b ? a : b;

条件(三元)运算符是 (condition ? do this : or this ) -> 把它想象成一个 if 语句 如果(a >= b){ return一个 }别的{ returnb }

Conditional (ternary) Operator

您的 '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]。

希望对您有所帮助。

我同意其他大多数评论,您应该多搜索并进行自学。 但是,我知道有时很难找到关于事情如何运作的确切信息。所以我向你解释这个。

现在来看你的代码。

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() 来获取排序值

你会期待这样的...作为输出 " [-21, -2, 0, 1, 3, 7, 11, 13, 17, 20, 34] "

但相反你会得到这样的输出..

" [-2, -21, 0, 1, 11, 13, 17, 20, 3, 34, 7] "

现在您想知道...为什么会出现这种奇怪的行为以及它对我的问题有何影响..

这很重要..

因为这是你需要做的才能得到正确的输出.. 编写排序函数的方式必须适用于 String 和其他类型。所以他们在进行排序比较时将数据转换为其他格式。

总而言之,如果您在内部传递一个函数并指定您需要按升序排列的 a-b.. 降序为 b-a.. ar.sort(函数(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

所以这个函数将采用多维数组,其中每个数组包含一些数字,这个函数将使你从所有这些数组中得到最高的..

我希望这能解释一切。

JS reduce 方法针对数组的两个值应用,并根据定义的条件(return c = a+b )将数组的这两个值(a 和 b)减少为一个(c)。 在您的情况下,条件是两个中哪个更大 (a>b?a:b).