filter
不返回布爾值,它返回一個包含原始數組元素的數組。它通過調用您在數組的每個元素上提供的函數來決定包含在結果中的元素。這個函數返回一個布爾值:如果它是真的,那個元素包含在結果中。該函數的參數是元素(在函數中稱爲item
)及其在陣列中的位置(稱爲pos
)。
該函數使用indexOf()
來查找數組中第一個元素的位置,該元素與給定元素具有相同的值。如果該位置與給定位置相同,則該元素必須是該數組中第一次出現該值,因此它返回true
,並且該元素將包含在結果中。如果位置不同,則此元素必須稍後重複,因此它返回false
,並且該元素不包含在結果中。最終的結果是,只有每個值的第一個副本包含在過濾結果中,這意味着它們都是唯一的。
例如,假設該陣列是:
["a", "b", "a", "c"]
在第一次迭代,item = "a"
和pos = 0
。 a.indexOf(item)
返回0
,函數返回0 == 0
,即true
,因此item
包含在結果中。
在第二次迭代中,item = "b"
和pos = 1
。 a.indexOf(item)
返回1
,函數返回1 == 1
,即true
,因此item
包含在結果中。
在第三次迭代中,item == "a"
和pos = 2
。 a.indexOf(item)
返回0
,函數返回0 == 2
,即false
,因此item
是而不是包含在結果中。
在第四次迭代中,item = "c"
和pos = 3
。 a.indexOf(item)
返回3
,函數返回3 == 3
,即true
,因此item
包含在結果中。
最終結果是第一次,第二次和第四次迭代中的項目包含在結果中,即["a", "b", "c"]
。
您是否閱讀過濾器功能的文檔? https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter它解釋了回調函數的參數。 – Barmar
過濾器不返回布爾值,它返回一個已過濾的數組。如果回調函數返回「true」,則item包含在結果中,如果爲false,則不是。在這種情況下,謂詞是 - 項目('pos')的當前索引是否與數組中項目的索引相同。如果沒有,該項目是重複的,我們會被過濾掉。閱讀一下[Array#filter](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter)。 –