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])
