美文网首页
javascript数组的indexOf,lastIndexOf

javascript数组的indexOf,lastIndexOf

作者: 踏莎行 | 来源:发表于2021-05-20 16:59 被阅读0次

indexOf

  数组的indexof方法可返回某个指定的值在数组中首次出现的位置。

参数

1.value : 你要查找的值

  1. start : 可选的整数参数。规定在数组中开始检索的位置。它的合法取值是 0 到 ArrayObj.length - 1,也就是说不能取负值,否则返回-1。如省略该参数,则将从字符串的首字符开始检索。

返回值

查找指定元素第一次出现的位置,如果没找到匹配的值则返回 -1。值是Number类型

var arr = ["a", "b", "c", "a"]
console.log(arr.indexOf("d")); // -1
console.log(arr.indexOf("a"));  // 0

上面的例子中在arr中查找字符串“d”,因为不存在,所以返回-1,查找“a”,数组中含有两个,只返回一个索引0。

注意:

  • 方法只会在数组的元素中寻找,不会再在数组的元素中找
var arr = ["hello", "world"]
console.log(arr.indexOf("hello")); // 0
console.log(arr.indexOf("h")); // -1
Snipaste_2021-05-19_21-25-46.png
  • 方法不会做隐式类型转换
var arr = ["1234",  "67685"]
console.log(arr.indexOf(1234));  // -1

也就是说其内部使用“===”做比较的
这里就要注意NaN了

console.log([NaN].indexOf(NaN)); // -1

第二个参数:

var arr = ["a", "b", "c", "a", "d", "e"]
console.log(arr.indexOf("a"));  // 0
console.log(arr.indexOf("a", 2)); // 从索引为2的位置开始查询“a”

利用这个方法可以实现数组去重,查找数组中所有你想要寻找的值的位置

  • 数组去重
var oldArr = [1, 5, "as", "89", undefined, 1, true, "as", 1]
var newArr = []
            
for(var i = 0; i < oldArr.length; i++){
  if(newArr.indexOf(oldArr[i]) === -1){
    newArr.push(oldArr[i])
  }
}
            
console.log(newArr);  // (6) [1, 5, "as", "89", undefined, true]
  • 查找所有你要查找的值的索引
var indexArr = []
var array = ["1", "3", "df", "df", "ki", "1"]
var value = "df"
var idx = array.indexOf(value)
while(idx != -1){
  indexArr.push(idx)
  idx = idx >= 0 ? array.indexOf(value, idx+1) : -1
}
            
console.log(indexArr); // (2) [2, 3]

lastIndexOf

这个方法和indexOf方法就有点相反,它是找到你想查找的值在数组最后出现的索引。说白了,indexOf从数组开头查找,lastIndexOf是从数组末尾查找,返回该方向上第一次出现该值的索引(index)
参数

1.searchValue: 规定需检索的值。
2.start: 可选的整数参数。规定在字符串中开始检索的位置,若没有传,则从数组最后一位开始检索。可以取负值,代表从倒数第几个元素从后向前检索,包括这个值

返回值

查找指定元素最后一次出现的位置,如果没找到匹配的值则返回 -1。值是Number类型

var array = ["a", "a", "hu", 87, "retw", "a"]
console.log(array.lastIndexOf("hu")); // 2
console.log(array.lastIndexOf("a", -1));  // 包括倒数第一个
console.log(array.lastIndexOf("a", -2)); // 1
console.log(array.lastIndexOf("b")); // -1

其他的参照一下indexOf即可
这个方法同样也可以实现数组去重和查找所有你要查找的值的索引,也和indexOf类似,这只作一个查找索引的封装,可以写成一个单独的函数,也可以放到数组的原型上

var array = ["a", "a", "hu", 87, "retw", "a"]
            
function searchAllValueIndex(arrObj, value){
  var indexArr = []
  var idx = arrObj.lastIndexOf(value)
  while(idx != -1){
    indexArr.unshift(idx)
    idx = idx > 0 ? arrObj.lastIndexOf(value, idx - 1) : -1
  }
  return indexArr
}
            
console.log(searchAllValueIndex(array, "a"));  // (3) [0, 1, 5]

includes

方法用来判断一个数组是否包含一个指定的值
参数

1.value:要检测的值
2.start: 从start索引处开始查找。如果为负值,则按升序从末尾开始往前跳start 的绝对值个索引(包括当前索引),然后往后搜寻。默认为0。如果start大于等于数组长度 ,则返回 false 。该数组不会被搜索:

返回值

布尔值:如果数组中有你要检索的值,则返回true,如果没有返回false

var array = ["1", "a", "hu", 87, "retw"]    
console.log(typeof array.includes("a"));  // boolean
console.log(array.includes("a")); // true
console.log(array.includes("a", 2));  // false
console.log(array.includes("a", -4));  // true

使用此方法可以优化if程序
如果需要判断

if(a === 1 || a === 2 || a === 3 || a === 4){...}

我们就可以使用includes进行优化

var numBox = [1, 2, 3, 4]
if(numBox.includes(a)){......}

最后注意

这三个方法,对大小写都是敏感的

var array = ["1", "a", "hu", 87, "retw"]
console.log(array.indexOf("A")); // -1
console.log(array.lastIndexOf("A")); // -1
console.log(array.includes("A")); // false

相关文章

网友评论

      本文标题:javascript数组的indexOf,lastIndexOf

      本文链接:https://www.haomeiwen.com/subject/svlmjltx.html