描述
输入:[false, true, undefined, null, NaN, 0, 1, {}, {}, ‘a’, ‘a’, NaN]
输出:[false, true, undefined, null, NaN, 0, 1, {}, {}, ‘a’]
利用indexOf
实现
indexOf()
方法返回在数组中可以找到一个给定元素的第一个索引,如果不存在,则返回-1
。
Array.prototype.uniq = function () {
let newArr=[]
let flag=true
for(let i=0,len=this.length;i<len;i++){
if(newArr.indexOf(this[i])==-1){
if(this[i]!==this[i]){//排除NaN
if(flag){
newArr.push(this[i])
flag=false
}
}else{
newArr.push(this[i])
}
}
}
return newArr
}
let arr=[false, true, undefined, null, NaN, 0, 1, {}, {}, 'a', 'a', NaN]
console.log(arr.uniq())
利用includes实现
Array.prototype.includes
方法返回一个布尔值
,表示某个数组是否包含给定的值,与字符串的includes
方法类似。ES2016 引入了该方法。
Array.prototype.uniq = function () {
let newArr=[]
let flag=true
for(let i=0,len=this.length;i<len;i++){
let bool=newArr.includes(this[i])
if(bool===false){
if(this[i]!==this[i]){//排除NaN
if(flag){
newArr.push(this[i])
flag=false
}
}else{
newArr.push(this[i])
}
}
}
return newArr
}
let arr=[false, true, undefined, null, NaN, 0, 1, {}, {}, 'a', 'a', NaN]
console.log(arr.uniq())