indexOf
数组的indexof方法可返回某个指定的值在数组中首次出现的位置。
参数
1.value : 你要查找的值
- 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
- 方法不会做隐式类型转换
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