Skip to content

检查JavaScript数组是否只有一个或多个匹配项

在处理数组时,查找与给定条件匹配的值是最常见的任务之一。幸运的是,JavaScript的Array方法从不停止提供帮助,可以轻松执行此类操作。

检查数组是否只有一个匹配项

使用Array.prototype.filter()Array.prototype.length,您可以轻松地检查数组是否只有一个与给定函数匹配的值。

const hasOne = (arr, fn) => arr.filter(fn).length === 1;

hasOne([1, 2], x => x % 2); // true
hasOne([1, 3], x => x % 2); // false

找到唯一匹配元素的索引

要找到唯一匹配元素的索引,可以使用Array.prototype.findIndex()

const findIndex = (arr, fn) => arr.findIndex(fn);

findIndex([1, 2, 3, 4], x => x % 2); // 0
findIndex([2, 4, 6, 8], x => x % 2); // -1

检查数组是否有多个匹配项

为了检查数组是否有多个值与给定函数匹配,你可以使用相同的方法。唯一的区别是你需要将比较运算符从===改为>

const hasMany = (arr, fn) => arr.filter(fn).length > 1;

hasMany([1, 3], x => x % 2); // true
hasMany([1, 2], x => x % 2); // false

找到所有匹配元素的索引

找到所有匹配元素的索引稍微复杂一些。你需要使用Array.prototype.reduce()来循环遍历元素并存储匹配元素的索引。

const indexOfAll = (arr, val) =>
  arr.reduce((acc, el, i) => (el === val ? [...acc, i] : acc), []);

indexOfAll([1, 2, 3, 1, 2, 3], 1); // [0, 3]
indexOfAll([1, 2, 3], 4); // []