2021-04-25 用最简洁代码实现 indexOf 方法

用最简洁代码实现 indexOf 方法

indexOf 有两种:

  1. String.prototype.indexOf()
// 返回从 fromIndex 处开始搜索第一次出现的指定值的索引,如果未找到,返回 -1
// fromIndex 默认值为 0
str.indexOf(searchValue [, fromIndex])
  1. Array.prototype.indexOf()
// 返回在数组中可以找到一个给定元素的第一个索引,如果不存在,则返回 -1
arr.indexOf(searchElement[, fromIndex])

解答

String.prototype.indexOf()

思路:正则,字符串匹配

function sIndexOf(str, searchStr, fromIndex = 0) {
  var regex = new RegExp(`${searchStr}`, "ig");
  regex.lastIndex = fromIndex;
  var result = regex.exec(str);
  return result ? result.index : -1;
}

Array.prototype.indexOf()

function aIndexOf(arr, elem, fromIndex = 0) {
  if (!elem) return -1;
  for (let i = fromIndex; i < arr.length; i++) {
    if (arr[i] === elem) return i;
  }
  return -1;
}

合二为一

function indexOf(items, item, fromIndex = 0) {
  let isArray = Array.isArray(items);
  let isString = Object.prototype.toString.call(items) == "[object String]";
  if (!isArray && !isString) throw new SyntaxError();
  if (isArray) return sIndexOf(items, item, fromIndex);
  else return aIndexOf(items, item, fromIndex);
}

本文章由javascript技术分享原创和收集

发表评论 (审核通过后显示评论):