本文摘自PHP中文网,作者coldplay.xixi,侵删。
文章目录
- 一、findIndex 和 findLastIndex
- 1.1 findIndex
- 1.2 findLastIndex
- 1.3 合并 findIndex 和 findLastIndex
- 二、sortIndex
- 三、indexOf 和 lastIndexOf
- 3.1 indexOf 的第一版实现
- 3.2 indexOf 和 lastIndexOf 通用第一版
- 3.3 indexOf 和 lastIndexOf 通用第二版
- 参考
- 写在最后
(免费学习推荐:javascript视频教程)
一、findIndex 和 findLastIndex
1.1 findIndex
findIndex()方法返回数组中满足提供的测试函数的第一个元素的索引。若没有找到对应元素则返回-1。
1 | const array1 = [5, 12, 8, 130, 44]; const isLargeNumber = (element) => element > 13;console.log(array1.findIndex(isLargeNumber));
|
实现
1 2 3 4 5 6 7 8 9 | Array.prototype.newFindIndex = function (callback) {
const _arr = this;
const len = _arr.length;
for (let i = 0; i < len; i++) {
if (callback(_arr[i], i, _arr)) {
return i;
}
}
return -1;}; const array1 = [5, 12, 8, 130, 44]; const isLargeNumber = (element) => element > 13;console.log(array1.newFindIndex(isLargeNumber));
|
1.2 findLastIndex
同样当我们倒叙查找首个满足条件的方法时,可以这样写:
1 2 3 4 5 6 7 8 9 | Array.prototype.newFindlastIndex = function (callback) {
const _arr = this;
const len = _arr.length;
for (let i = len - 1; i >= 0; i--) {
if (callback(_arr[i], i, _arr)) {
return i;
}
}
return -1;}; const array1 = [5, 12, 8, 130, 44]; const isLargeNumber = (element) => element > 13;console.log(array1.newFindlastIndex(isLargeNumber));
|
上面的代码,和正序查找很相似,仅仅改变遍历的条件。
1.3 合并 findIndex 和 findLastIndex
大家可以看到,除了循环的条件不同,两个方法几乎一模一样,参考 lodash,我们将两个方法精简一下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
function baseFindIndex( array , predicate, fromRight) {
const { length } = array ;
let index = fromRight ? length : -1;
while (fromRight ? index-- : ++index < length) {
if (predicate( array [index], index, array )) {
return index;
}
}
return -1;}
|
再来看看它的兄弟――underscore
的思路就是利用传参的不同,返回不同的函数。
1 2 3 4 5 6 7 8 9 10 | function createIndexFinder(dir) {
return function ( array , predicate, context) {
const { length } = array ;
var index = dir > 0 ? 0 : length - 1;
for (; index >= 0 && index < length; index += dir) {
if (predicate.call(context, array [index], index, array )) return index;
}
return -1;
};} var findIndex = createIndexFinder(1); var findLastIndex = createIndexFinder(-1);
|
关于 findIndex
我们就告一段落了~,再来看看新的场景和实现吧!
二、sortIndex
在一个排好序的数组中找到 value
对应的位置,即保证插入数组后,依然保持有序的状态。
1 | const arr = [1, 3, 5];sortedIndex(arr, 0);
|
那么这个又该如何实现呢?
2.1 遍历
遍历大家都能想到,虽然它不一定最优解:
阅读剩余部分
相关阅读 >>
快来看看 ajax实时刷新处理
es6 map原理分析
javascript中sort()方法怎么用
javascript中generator函数的详理解
js中null是什么意思?
javascript用什么分割成数组
javascript介绍ajax加载单张图片展示进度的方法
java和javascript关系大吗
你知道原生html组件是什么吗?原生html组件的介绍
javascript中return的含义是什么
更多相关阅读请进入《javascript》频道 >>
人民邮电出版社
本书对 Vue.js 3 技术细节的分析非常可靠,对于需要深入理解 Vue.js 3 的用户会有很大的帮助。——尤雨溪,Vue.js作者
转载请注明出处:木庄网络博客 » JavaScript 专题之九:数组中查找指定元素