[英]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 e
以return true
或任何其他真實值來進行驗證。
同樣,在第二個示例中:
var r = [2, 9, 11];
console.log(r.find(function(e, i, r) {
if (e % 2 === 0)
return i;
}))
您的回調在第一個元素上返回0
(因為i
為0
),但這不是事實。
find方法對數組中存在的每個元素執行一次回調函數, 直到找到其中回調返回真值的元素為止。
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/find
回調返回僅用於指示當前值是否應為結果。 這就好比find
您的回調函數對當前值詢問“是或否”。
在第二種情況下,2通過e % 2 === 0
並且您返回i
。 但是i
是0
,一個虛假的值,所以find
跳過它並繼續。 進一步的值(9和11)未通過e % 2 === 0
。 沒有顯式返回值的函數將返回undefined
,即偽造的值。 最后,沒有回調返回真實值, find
返回undefined
。
第三種情況, 2
傳遞e % 2 === 0
並且您返回了r
,這是一個真實值的數組。 馬上find
,返回的第一個項目是2
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.