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