簡體   English   中英

Array.prototype.find()意外行為

[英]Array.prototype.find() unexpected behavior

根據此MDN鏈接 ,find()方法采用一個回調函數,該函數可以采用三個參數:當前數組元素,當前數組元素的索引以及正在調用該方法的數組。

所以:

var r = [2, 9, 11]; console.log(r.find(function(e, i, r) {
    if (e % 2 === 0)
        return e; }))

如我所料,返回2。

然而:

var r = [2, 9, 11];
console.log(r.find(function(e, i, r) {
    if (e % 2 === 0)
        return i;
}))

返回未定義(當我期望為0時),

var r = [2, 9, 11];
console.log(r.find(function(e, i, r) {
    if (e % 2 === 0)
        return r;
}))

返回2(當我期望[2,9,11]時)。

有人可以解釋一下我沒有正確理解的內容嗎?

假定您傳遞給.find()的回調返回一個布爾值(真或假)。 .find()返回的值是回調為其返回非假值的第一個元素的值。

在第一個示例中:

var r = [2, 9, 11]; console.log(r.find(function(e, i, r) {
    if (e % 2 === 0)
        return e; }))

返回值是2 不是因為return e; 返回值2 ,但是因為2是真實的。 您可以通過更改return ereturn true或任何其他真實值來進行驗證。

同樣,在第二個示例中:

var r = [2, 9, 11];
console.log(r.find(function(e, i, r) {
    if (e % 2 === 0)
        return i;
}))

您的回調在第一個元素上返回0 (因為i0 ),但這不是事實。

find方法對數組中存在的每個元素執行一次回調函數, 直到找到其中回調返回真值的元素為止。

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/find

回調返回僅用於指示當前值是否應為結果。 這就好比find您的回調函數對當前值詢問“是或否”。

在第二種情況下,2通過e % 2 === 0並且您返回i 但是i0 ,一個虛假的值,所以find跳過它並繼續。 進一步的值(9和11)未通過e % 2 === 0 沒有顯式返回值的函數將返回undefined ,即偽造的值。 最后,沒有回調返回真實值, find返回undefined

第三種情況, 2傳遞e % 2 === 0並且您返回了r ,這是一個真實值的數組。 馬上find ,返回的第一個項目是2

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM