let ary = [12,23,12,15,25,15,25,23,16];
数组去重 1.es6的SET
let arr = Array.from(new Set(ary));
console.log(arr);
2.拿出当前项和后面的内容进行比较
for(let i = 0;i<ary.length-1 ; i++) {
let item = ary[i],
args = ary.slice(i+1);
if(args.indexOf(item)>-1) {
//包含:我们可以把当前项干掉
//splice 删除
// 1.原来数组改变,这样如果i继续++,则会产生数组塌陷
// 2.性能不好,当前项一旦删除,后面项索引都要变
ary.splice(i,1);
i--;
}
}
console.log(ary);
3.
let arr = [];
for(let i = 0;i<ary.length ; i++) {
let item = ary[i],
args = ary.slice(i+1);
if(args.indexOf(item)>-1) {
//包含:我们可以把当前项干掉
//splice 删除
// 1.原来数组改变,这样如果i继续++,则会产生数组塌陷
// 2.性能不好,当前项一旦删除,后面项索引都要变
}else{
arr.push(item);
}
}
console.log(arr);
键值对 4.拿数组中的每项向新容器中存储,如果已经存储过了,把当前项干掉
let obj = {};
for(let i=0;i<ary.length;i++){
let item = ary[i];
if(typeof obj[item] !== 'undefined') {
ary[i] = ary[ary.length-1];
ary.length-1;
i--;
continue;
}
obj[item] = item;
}
obj = null;
console.log(ary);
先排序 5.相邻项的处理方案 正则
ary.sort((a,b)=>a-b);
ary = ary.join('@') + '@';
let reg = /(\d+@)\1*/g,
arr = [];
ary.replace(reg,(val,group1)=>{
// arr.push(parseFloat(group1));
arr.push(Number(group1.slice(0,group1.length-1)));
})
console.log(arr);
数组排序 冒泡排序
function bubble(ary) {
let temp = null;
//外层循环控制比较的轮数
for(let i = 0;i<ary.length-1;i++) {
//里层循环控制每一轮比较的次数j
for(let j=0;j<ary.length-1-i;j++) {
if(ary[j] > ary[j+1]){
//当前项大于后一项
temp = ary[j];
ary[j] = ary[j+1];
ary[j+1] = temp;
}
}
}
return ary;
}
let ary = [12,8,24,16,1];
ary = bubble(ary);
console.log(ary);
排序 插入排序
function insert(ary) {
//1.准备一个新数组,用来存储抓到手里的牌,开始先抓一张牌进来
let handle = [];
handle.push(ary[0]);
//2.从第二项开始依次抓牌,一直到把台面上的牌抓光
for(let i=1;i<ary.length;i++) {
//A是新抓的牌
let A = ary[i];
//和手里的牌依次比较(从后往前比)
for(let j = handle.length-1;j>=0;j--) {
//每次要比较的手里的牌
let B = handle[j];
//如果当前排A比要比较的牌B大了。。把A放到B的后面
if(A>B) {
handle.splice(j+1,0,A);
break;
}
//已经比到第一项,我们把新牌放到手中最前面计可
if(j===0){
handle.unshift(A);
}
}
}
return handle;
}
let ary = [12,8,24,16,1];
ary = insert(ary);
console.log(ary);
//排序 快速排序
function quick(ary) {
//结束递归
if(ary.length<=1) {
return ary;
}
//找到数组的中间项,在原有的数组中把他移除
let middleIndex = Math.floor(ary.length/2);
let middleValue = ary.splice(middleIndex,1)[0];
//准备左右两个数组,循环剩下数组中的每一项,比当前项小的放到左边数组中,反之放到右边数组
let aryLeft = [];
let aryRight = [];
for(let i = 0;i<ary.length;i++) {
let item = ary[i];
item < middleValue ? aryLeft.push(item) : aryRight.push(item);
}
//最后让左边+中间+右边拼接成为最后的结果
return quick(aryLeft).concat(middleValue,quick(aryRight));
}
let ary = [12,8,24,16,1];
ary = quick(ary);
console.log(ary);