「複雜數組元素」判斷數組中元素存在性的正確搞法
點擊右上方紅色按鈕關注「小鄭搞碼事」,每天都能學到知識,搞懂一個問題!
今天講一個稍微複雜一點的數組的正確處理方式,數組元素是對象,如下。
const characters = [
{ id : 1, name: "小鄭" },
{ id : 2, name: "小鄭搞碼事" },
{ id : 3, name: "小鄭" },
{ id : 4, name: "小鄭搞" }
]
這個數組和簡單數組類型相較顯得結構複雜些,然而,目前這種形式的應用範圍卻是最廣的。所以,很有必要搞清楚它的一些正確的處理方式。以免犯錯。
一、需要考慮性能
如果我需要找出name等於"小鄭"的所有元素,那麼無疑filter是較好的處理方式。
let result = characters.filter((item, index) => {
console.log(index)
return item && item.name === "小鄭"
})
輸出結果是:
0,1,2,3
[{id: 1, name: "小鄭"},{id: 3, name: "小鄭"}]
注意到這種情況是需要遍歷所有元素的。
然而,如果你只是需要知道name="小鄭"的第一個元素情況,或者說只需要知道是否存在name="小鄭"的元素,那麼使用filter的性能消耗太大了,可以試試find 。
let result = characters.find((item, index) => {
console.log(index)
return item && item.name === "小鄭"
})
輸出結果是:
0
[{id: 0, name: "小鄭"}]
find函數不會遍歷所有數組元素,找到相符的一個元素就返回。
二、需要重審需求
有時候需要重審一下自己的需求,可能你只是想知道name="小鄭"這個元素是否存在,這看著就是一個是與否的問題,所以,返回布爾值才是最理想的。可以使用some。
let result = characters.some((item, index) => {
console.log(index)
return item && item.name === "小鄭"
})
返回結果:true
總結一下:
今天講了一些新方法正確使用的情況,還有一些新的方法,比如reduce,它又就是如何正確應用到代碼中的呢,有機會在來聊聊。


※小鄭搞碼事:生成器(Generator)雖好理解,但需要注意一個問題
TAG:小鄭搞碼事 |