簡體   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