繁体   English   中英

Javascript减少功能/三元运算符

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

我同意其他大多数评论,您应该进行更多搜索并进行自我学习。 但是,我知道有时很难找到有关工作方式的确切信息。 病了,请向您解释。

现在进入您的代码。

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,11,13,20,34]”

但是相反,您将获得如下输出。

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

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

这很重要..

因为这是获得正确输出所需要执行的操作。编写排序函数的方法也必须适用于String和其他类型。 因此当进行排序比较时,它们会将数据转换为其他格式。

因此,总而言之,如果您在内部传递一个函数并指定您需要ab的升序。.ba的降序.. ar.sort(function(a,b){return ab;})

现在进入另一个部分,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 =索引,currArray =您正在使用的数组。

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

a >= b ? a : b;

条件(三元)运算符,即(条件?执行此操作:或此操作)->将其视为if语句If(a> = b){返回} else {return 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方法适用于数组的两个值,并根据定义的条件(返回c = a + b)将数组的两个值(a和b)简化为一个(c)。 在您的情况下,条件是两个之中哪个更大(a> b?a:b)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM