Array.prototype.indexOf()
indexOf()
方法返回在数组中可以找到一个给定元素的第一个索引,如果不存在,则返回-1。
语法:
arr.indexOf(searchElement[, fromIndex])
searchElement
要查找的元素fromIndex
可选
开始查找的位置。如果该索引值大于或等于数组长度,意味着不会在数组里查找,返回-1。如果参数中提供的索引值是一个负值,则将其作为数组末尾的一个抵消,即-1表示从最后一个元素开始查找,-2表示从倒数第二个元素开始查找 ,以此类推。 注意:如果参数中提供的索引值是一个负值,并不改变其查找顺序,查找顺序仍然是从前向后查询数组。如果抵消后的索引值仍小于0,则整个数组都将会被查询。其默认值为0.- 返回值
首个被找到的元素在数组中的索引位置; 若没有找到则返回 -1
去重方法:
function duplicateRemoval<T>(arr: T[]):T[] {
return arr.filter((item: T, index: number, arr: T[]) => arr.indexOf(item, 0) === index)
}
ES6 - Set 数据结构
function uniqueArr(arr) {
return [...new Set(arr)];
}
双重for
循环 + splice
function unique(arr) {
for(let i = 0; i < arr.length; i++) {
for(let j = i + 1; j < arr.length; j++) {
if(arr[i] === arr[j]) {
// 重点代码:第一个等于第二个,使用 splice 方法删除第二个
arr.splice(j, 1)
j--
}
}
}
return arr
}
for
循环 + indexOf
/ includes
,返回新数组
reduce + includes
function unique(arr) {
return arr.reduce((prev, cur) => {
if(!prev.includes(cur)) {
prev.push(cur)
}
return prev
}, [])
}
unique([1, 2, 3, 4, 2, 6, 1, 8])
使用哈希表存储元素是否出现过(ES6 - Map)
function unique(arr) {
let map = new Map()
let uniqueArr = [] // 返回结果
for(let i = 0; i < arr.length; i++) {
if(map.has(arr[i])) {
map.set(arr[i], true)
}else {
map.set(arr[i], false)
uniqueArr.push(arr[i])
}
}
return uniqueArr
}
unique([1, 2, 3, 4, 2, 6, 1, 8])