Javascript reduce函数/三元运算符


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

最新更新