let arr1 = [1, 2, 4, 4, 3, 3, 1, 5, 3];
求:arr1 数组中重复的值
思路:定一个空数组用来放相同的值,该数组循环两次,对比!
//关键代码
for(var j of arr){
for(var i of arr){
if(j === i && newArr.indexOf(j) == -1){
newArr.push(j)
}
}
}
return newArr
悲剧的是,返回值是没有重复值跟我想的不一样 返回:[1,2,3,4,5]
修改一下
j !== i
返回 [1,2]
然后看了别人的代码
let arr = [1, 2, 4, 4, 3, 3, 1, 5, 3];
function duplicates(arr) {
var result = [];
arr.forEach(item => {
//判断检查数据从头到尾 与 从尾到头 的位置是否 不同 并且 每次判断 新数组里面是否有 当前值的 位置 没有那么 进行下一步
if (arr.indexOf(item) !== arr.lastIndexOf(item) && result.indexOf(item) == -1) {
result.push(item);
}
})
return result //返回 1 3 4
}
duplicates(arr)
唯一的缺点就是复杂度上升
arr.indexOf(item)
返回 0 1 2 2 4 4 0 7 4
arr.lastIndexOf(item)
返回 6 1 3 3 8 8 6 7 8
arr.indexOf(item) !== arr.lastIndexOf(item)
返回 true false true true true true true false true
为true的时候
出现了 1 4 4 3 3 1 3
然后
result.indexOf(item) == -1) 每次都要跟当前值 做对比 如果有 ,那么就不push 进去
那么 1 4 不push 3 不push 不push
最终返回143,第一次做感觉非常难,但是仔细想了之后,明白之后也就这样~~-,-