some、every、find 和 findIndex 有什么区别?
请说明数组方法 some、every、find、findIndex 的功能区别和使用场景。
回答
专业代码师
some:检测是否至少有一个元素满足条件,返回布尔值。遇到第一个满足的元素即停止。
- 场景:权限检查
roles.some(r => r === 'admin')
every:检测是否所有元素满足条件,返回布尔值。遇到第一个不满足即停止。
- 场景:表单验证
inputs.every(inp => inp.valid)
find:返回第一个满足条件的元素(值本身),否则 undefined。
- 场景:查找对象
users.find(u => u.id === id)
findIndex:返回第一个满足条件的元素的索引,否则 -1。
- 场景:找到要删除的元素索引
arr.splice(arr.findIndex(x => x.id === id), 1)
对比: | 方法 | 返回类型 | 停止条件 | 未找到 | |------|---------|---------|-------| | some | boolean | 任一为 true | false | | every | boolean | 任一为 false | true | | find | 元素本身 | 找到满足条件的元素 | undefined | | findIndex | number | 找到满足条件的元素 | -1 |
注意:
some、find、findIndex当所有元素为空时返回false/undefined/-1every对空数组调用返回true(无矛盾条件,vacuous truth)- 这些方法都不会修改原数组