1.新建数组
新建数组,将原始数组中的数据,写入新数组
新数组中,没有的数据,再写入
var arr=[1,2,3,1,2,3,4,1,2,3,4,5,1,2,3,4,5,6,] console.log( setNewArr(arr) ); // 封装成一个函数的形式 // 你给我一个数组,我给你一个不重复的新数组 function setNewArr(array){ // 先定义一个空数组 var newArr = []; // 循环遍历 原始数组中的所有单元 // v 就是 每次循环 原始数组array 获取对应单元存储的数据 // v 一次是 1,2,3,1,2,3,4.... array.forEach(function(v){ // 将原始数组的数组,v,写入到新的数组中 // 需要添加判断, 判断 新数组 newArr 中 没有 v 再执行写入 // indexOf() 可以 在数组中 查询存储的数据 // 如果没有这个数据,返回结果是 -1 // 也就是 在 newArr 中 使用 indexOf() 查询 v // 如果结果是 -1 证明 newArr 中 没有 v // 可以执行写入操作 if( newArr.indexOf( v ) === -1 ){ newArr.push(v); } }) // 函数的执行结果,返回值,是新的数组 return newArr; }
2.排序删除
先将数组中的数值,进行排序
执行之后,存储相同数据的单元就会相邻
从第一个单元开始,当前单元和下一个单元比较
如果数值相同就删除后一个单元
如果数值不同,下一个单元和下下个单元比较
如果 是带有字符串的数组 sort() 中 写 function(a,b){ return a-b} 不能正确排序
需要 将 sort() 中 function(){} 删除 按照 首位数值大小排序
最大问题是: 数组的数值顺序,一定会有所改变
var arr=[1,2,3,'北京',1,2,3,'北京','上海',1,2,3,'北京','上海','广州'] console.log(setNewArr( arr ) ); function setNewArr(array){ // 将数组排序 array = array.sort(); // 数组去重 // 从第一个单元开始,当前单元 和 下一个单元 进行比较,如果存储的数值相同 // 就删除之后的单元 // 当前单元是 i 下一个单元是 i+1 // 当前单元存储的数据 array[i] 下一个单元的数据是 array[i+1] // array.length-1 是 最后一个单元的索引下标 // 最后一个单元 i+1 没有比较的对象了 // 倒数第二个单元 i+1 就是最后一个单元的比较了 for(var i = 0 ; i < array.length-1 ; i++){ // 定义是全等 if(array[i] === array[i+1]){ // 如果相同,就删除后一个单元 // 从 i+1 开始 删除 1个单元 array.splice( i+1 , 1 ); // 为了 防止 数组坍塌 造成的影响 // 就是对 反正 数组删除的单元 再次循环 再次操作 // 也就是对 坍塌过来的新的数组,再次执行比较判断操作 i--; } } return array; }
3.循环嵌套删除
数组排序删除重复的单元,会造成数组中党员顺序的改变,可以使用循环嵌套方法进行避免
从第一个单元开始,跟之后所有的单元比较
如果存储相同的数据,删除之后的数据
删除单元会触发数组的坍塌,要注意消除数组坍塌的影响
var arr=[ 1,2,3,4,3,2,1,1,2,3,4,5]; console.log( getNewArr(arr) ); function getNewArr(array){ // 外层循环,生成 第一个到 倒数第二个单元 的 索引下标 for(var i = 0 ; i <= array.length-1-1 ; i++){ // 内层循环,生成 i 之后的 所有 单元的索引下标 for(var j = i+1 ; j <= array.length-1 ; j++){ // array[i] 是当前的单元 // array[j] 是当前的单元,之后的所有单元 // 如果相等,删除 之后 j 单元 if(array[i] === array[j]){ array.splice( j , 1 ); j--; } } } return array; }
数组的坍塌:
数组 发生 删除单元操作
删除单元 之后的 单元 会 前移
顶替 删除 单元的位置
数组的长度就会减少
防止数组坍塌的影响:
核心
在发生 数组删除的单元 , 也就是 造成 坍塌的单元
再次 执行 循环 , 再次 操作这个单元
一般是 循环变量-- 操作
Comments | NOTHING