【问题标题】:Javascript reduce function/ternary operatorJavascript减少函数/三元运算符
【发布时间】:2015-08-17 09:22:07
【问题描述】:
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函数及其应用。

【问题讨论】:

  • 不确定斜体是否会出现!如果他们不这样做,我难以理解的代码部分位于两个星号之间。
  • Stack Overflow 是为人们寻找他们试图解决但找不到解决方案的问题的答案的。它不是为了解释代码来教人。我建议查找有关您不了解的功能的文档。
  • 太好了!斜体不显示,两个星号也不显示。好吧,只是为了澄清(我不期待 SuperBiasedMan 的帮助很快!)我遇到困难的部分是这部分 'highestValue = arr[i].reduce(function(a, b){return a >= b ? a : b;' 如果有人能帮助我理解这一点,将不胜感激,谢谢。

标签: javascript reduce higher-order-functions


【解决方案1】:

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

现在来看看你的代码。

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(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

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

我希望这能解释一切。

【讨论】:

    【解决方案2】:

    Reduce 函数允许您遍历数组中的每个项目,在您的情况下,您将能够在其中查看先前的数组值和当前的数组值:

    a = 先前的值, b = 当前值,

    -(不在里面)-

    i = 索引, currArray = 您正在使用的数组。

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

    a >= b ? a : b;
    

    条件(三元)运算符是(条件?执行此操作:或此)-> 将其视为 if 语句 如果(a >= b){ 返回一个 }别的{ 返回 b }

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

    我希望这会有所帮助。

    【讨论】:

    • 这确实有帮助。躲避我的代码部分是'return a >= b? : 乙;'如果我现在理解正确的话:这部分代码基本上是从arr中提取最大值并返回,然后在代码中将最大值推送到resultArray中,谢谢您的解释。
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 2019-11-09
      • 2018-11-08
      • 2020-08-02
      • 1970-01-01
      • 2020-04-29
      • 1970-01-01
      • 2021-06-25
      • 2012-02-11
      相关资源
      最近更新 更多