每天一题,坚持思考
实现indexOf函数,返回首次要查询的值在数组中的索引值。
问题
indexOf([1, 4, 5], 5); // 2
indexOf([4, 6, 8, 10], 10, 2) // 3
具体实现
function indexOf(array, value, fromIndex) {
if (Object.prototype.toString.call(array) !== "[object Array]") {
return -1;
}
var length = array.length;
if (length === 0) return -1;
if (typeof fromIndex === 'symbol') {
fromIndex = 0;
}
fromIndex = Number.parseInt(fromIndex);
fromIndex = Number.isNaN(fromIndex) ? 0 : fromIndex;
if (fromIndex < 0) {
fromIndex = Math.max(length + fromIndex, 0);
}
var index = fromIndex - 1;
while (++index < length) {
if (array[index] === value) {
return index;
}
}
return -1;
}
实现思路
参数:
array(Array):被查询的数组;value(*):需要查询的值;fromIndex(Number):查询的起始位置 ;
步骤:
- 判断当前的
array参数是否为数组,并且判断该数组的长度; - 检查起始查询位置
fromIndex的类型,如果是symbol数据类型,则赋值为0; - 对查询的起始位置值进行类型转换
fromIndex,还要对改值进行isNaN的判断;如果当前值是负数,那么对fromIndex进行处理fromIndex+数组长度; while进行遍历,查询数组中是否存在需要查询的值,如果有返回该索引值,否则返回-1;
如果读者发现有不妥或者可以改善的地方,欢迎在评论区指出。如果觉得写得不错或者对你有所帮助,可以点赞、评论、转发分享,谢谢~