arrays - 为什么在某些语言中 findIndex 返回 -1?
问题描述
我正在研究不同语言的错误处理方法。Array.findIndex
并且Array.find
当项目不存在时表现完全不同。find
方法更一致地返回null/undefined
值或抛出异常。但在某些语言中,findIndex
return-1
表示缺失值。我的问题是,退货有什么好处-1
吗?
如果不处理此错误collection[items.findIndex("non-exist")]
很容易导致运行时错误,那么我在这里缺少什么?
编辑:更具体地说,如果语言支持异常,为什么在某些语言中仍然返回-1
而不是抛出?
解决方案
在大多数语言中,-1
是一个不能表示数组索引的数字。因此,如果.findIndex()
方法返回,则意味着肯定-1
没有这样的元素,您可以执行简单的检查,例如
if (array.findIndex(...) == -1)
// an element does not exist in the array
判断一个元素是否存在于数组中。
遵循您的逻辑并将其应用于您的示例,如果.findIndex()
将返回null
/undefined
或抛出异常,那么您的示例用法
collection[items.findIndex("non-exist")]
.findIndex()
会以与 if会返回相同的方式失败,-1
因为既不是null
也不undefined
是数组索引,所以这一行会抛出一个我们需要处理的异常。如果.findIndex()
当元素不存在时会抛出异常,那么......我们还必须处理异常。如您所见,无论如何您都必须处理异常。
返回而不是 null 或抛出异常的另一个原因-1
是,在 Java 等语言中,不可能null
从应该返回数字的方法返回。但是,.find()
它旨在从数组中返回一个元素,该元素可能是任何东西,因此null
如果您的数组不希望包含空值,则返回有点意义。在这种情况下,如果返回值为 ,则可以假设元素不存在null
。
推荐阅读
- python - pypyodbc - 使用存储过程并将数据存储到数据框中
- for-loop - Tcl/tk:我应该使用 for 还是 foreach?
- jquery - 让所有表单字段同时验证,包括 recaptcha
- sql - 使用 SQL Server 中的查询在表中使用类似功能的复选框
- sql - RedShift 中更新语句中的表别名
- mysql - 如何仅选择具有非空值sql的列
- reactjs - 样式化组件渲染触发元素类型错误
- laravel - 使用 Laravel 通过查询将表划分为 sub_table
- postgresql - PostgreSQL 不包含一些必需的头文件
- javascript - Javascript - 通过按键增加值,仅一次