「复杂数组元素」判断数组中元素存在性的正确搞法

点击右上方红色按钮关注“小郑搞码事”,每天都能学到知识,搞懂一个问题!

今天讲一个稍微复杂一点的数组的正确处理方式,数组元素是对象,如下。

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,它又就是如何正确应用到代码中的呢,有机会在来聊聊。


分享到:


相關文章: