js : 数组方法小结+数组去重+算法(快排+插排+冒排)

数组方法的小总结

  • 从数组的末尾删除一项,有哪些方法?
    • ary.length--
    • ary.length-=1
    • ary.length = ary.length-1
    • ary.pop()
    • ary.splice(ary.length-1,1)
  • 给数组末尾增加一项
    • ary.push()
    • ary[ary.length] = XXXX
    • ary.splice(ary.length,XXX)
  • 数组的克隆
    • ary.slice()
    • ary.slice(0)
    • ary.concat()
    • ary.splice(0)

选项卡的封装

  • 功能:1) 可以让一个页面中多个容器都有选项卡的功能 2) 通过第二个参数,设置默认亮点项
  • 如果参数可有可无 ||的思想 var selectIndex = selectIndex % aBtn.length || 0;
  • % 的思想


  • 按钮 1
  • 按钮 2
  • 按钮 3
内容 1
内容 2
内容 3

数组去重的思路

  • 双重循环

    //直接让数组的前一项与数组的后一项进行比较相同就删除其中一个
    var arr = [2,1,4,3,2,3,3,2,1,3,1,0];
    for(var i=0;i
  • 先sort,然后用当前项跟相邻项进行比较

    //思路:先用sort进行排序,这样重复的数字会排列在一起,然后让相邻项进行比较,相同删除其中一个
    var ary = [2,4,1,2,3,4,4,2,2,0,3,2,0];
    ary.sort(function(a,b){return a-b;})
    for(var i=0;i
  • 新数组

   //思路:创建一个新数组,查看新数组中是否有原数组的项,没有就添加到新数组,有就删除原数组项
   var ary = [4,3,2,4,2,2,3,2,3,4,2,2,1,0];
   var newAry = [];
   for(var i=0;i
  • 利用对象不重名的特性
//思路:1.创建一个新的对象 2.让数组中的每一项与对象中的项比较,true为重复,原数组删除,false为不重复,添加给对象
    var ary = [2,3,4,1,3,2,4,2,1,4,0,1];
    var obj = {};
    for(var i=0;i
  • 利用对象不重名的特性,实现了重复次数的记录,里面用到两个循环,一个for循环,一个for...in循环
     //思路:让数组的每一项与对象中的项进行比较,true为重,让对象value++ ,false为不重复,添加给对象一个新的元素
     var ary = [1,2,3,4,2,1,3,2,3,1,3,4,2,1,0];
     var obj = {};
     for(var i=0;i

### 对象跟别人不同的特性
1. 不重名的特性
2. 如果对象的属性名是数字,那么打印出来的时候,按照数组的先后顺序排序

## 算法
### 快排
#### 思路
1. 先拿到中间的索引,通过中间的索引找到他对应的项
    + 这个中间项,是从数组中拎出来的,即数组中没有他了,所以,只能用户splice
    + splice的返回值,是被删除的内容以新数组的形式返回,因为我们删除了一项,所以,要取数字必须用[0];
2. 创建两个新数组,left 和 right
3. 用 原始数组 跟 中间项比较,比中间项小,放入left,反之,放入right
4. return qucikSort(left).concat([centerValue],qucikSort(right));
    + 函数自己调用自己,属于“递归”
5. 停止拆分条件 if(ary.length <= 1){ return ary };
    + return 1) 有阻断程序执行的功能 2) 返回值


### 插排
#### 思路
1. 先从ary中取出一个数字,单独是个数组  方法splice
2. 遍历ary数组,跟left数组,从后往前比较,如果left的数字小,继续往前比,如果比某个值大,就插入到这个值的下一项的前面(必须break,否则会出错,死循环);如果比所有的都小,那就插入到left数组的第一个位置;

var ary = [4,22,1,2,4,5,63,2,6,7,4,8,0];

function inserSort(ary){
    //从原始数组中获取任意一项
    var left = ary.splice(0,1);
    //遍历原始数组,让其每一项与left从后向前比较
    for(var i=0;i=0;){
            if(cur < left[j]){//小于表示原始数组项继续向前比较
                j--;
                if(j == -1){ //当 j 为 -1 时,表示原始项已经比较到left数组项的第一位
                    left.splice(0,0,cur);
                }
            }else{
                left.splice(j+1,0,cur);
                break;
            }
        }
    }
    return left;
    
}

var res = insertSort(ary);

### 冒排-冒泡排序
1. 两重循环,第一重循环代表轮数,第二重循环代表比较的次数,比较的次数在一次次的减少
2. 每次比较的时候,都拿当前项跟后一项进行比较,如果比他大,交换位置

var ary = [6,3,7,3,2,1,0];
function maopoSort(ary){
    
    //第一层循环表示,比较的轮数
    for(var i=0;i ary[j+1]){
                // 声明了一个空变量来当转接器
                var tmp = ary[j];
                ary[j] = ary[j+1];
                ary[j+1] = tmp;
            }
        }
    }
    return ary;
}

var res = maopoSort(ary);

### 验证码



### 循环
- for 和 while 循环

### Math常用的方法
- Math.ceil()  向上取整
- Math.floor()  向下取整
- Math.round()  四舍五入
- Math.random() 取0-1之间的随机数,不包含1;
    + Math.round(Math.random()*(m-n) + n);  取n-m之间的随机数,包含m
- Math.pow() 幂次方
- Math.sqrt() 开平方
- Math.abs() 绝对值

### 跟函数有关
- 阻断函数的执行 return

### 跟循环有关
- break; 循环彻底不执行
- continue; 本次不执行,后面的继续

你可能感兴趣的:(js : 数组方法小结+数组去重+算法(快排+插排+冒排))