Dart 提供了一个方法 indexWhere
用来获取第一个匹配元素的 index:
但在实际开发中这个方法用起来并不是那么顺手,原因就在它的文档描述中:
当无匹配元素时,返回 -1
说实话,挺蛋疼的,返回 null
多好啊!!!
既然官方不提供,那就自己写一个 List
的 extension
:
extension ListExtension<E> on List<E> {
/// 获取数组中第一个匹配元素的index,没有就返回null
int? indexWhereOrNull(bool Function(E element) test) {
for (int i = 0; i < length; i++) {
if (test(this[i])) return i;
}
return null;
}
}
使用:
final list = [1, 2, 3];
final index = list.indexWhereOrNull((element) => element == 4);
print(index); // null
舒服多了。