检查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); // []