数组操作函数

201 阅读2分钟

1.push()

 //push()函数 
 //特性:往数组尾部添加元素,可添加多个       
 //返回数组长度        
//尝试写函数覆盖        
var arr = [];
        Array.prototype.push = function () {  
          for (var i = 0; i < arguments.length; i++) {  
              this[this.length] = arguments[i];            }        
    return this.length;        }

2. pop ( )

把数组的最后一位剪切出去

(执行不用传参)

3.unshift ( )

 在数组前面增加元素、shift()是删除

4.reverse ( )

 逆转数组,返回原数组

5.splice( )

// splice ---- 切片 

arr.splice ( 从第几位开始,截取多少的长度,再切口处添加新的数据 ) 

ps:返回截取的部分

var arr = [1,2,3,5];
arr.splice(3,0,4); // arr = [1,2,3,4,5]

如果是负数位,就是从尾部开始截取 

因为是负数的时候系统做了兼容

splice = function(pos){
     pos += pos > 0 ? 0 : this.length;   //  pos = pos + (pos > 0 ? 0 : this.length);
}

// 输入的是-1 其实就相当于 -1 + 4 = 3.

6. sort( ) ※

数组排序

var arr = [-1,5,7,3,9];
arr.sort(); // arr = [-1,3,5,7,9]

升序排列后返回

降序的话可以 arr.sort().reverse()

var arr1 = [-1,5,-9,7,8,56,4];    
    arr1.sort();     
   console.log(arr1); //[-1, -9, 4, 5, 56, 7, 8]

说明他是按照 ASCII 码排序的

所以他给我们留了个编程接口,我们可以自己往里面写一个匿名function

这下就坏起来了,他就可以让这个方法按照我们想要的的任何方法排序

规则:

  1. 必须写两个形参
  2. 看返回值
  • 当返回值为负数时,前面的数放在前面
  • 当返回值为正数时,后面的数放在前面
  • 为0,不动
 所以升序的方法就是
var arr = [20, 9, 4, 19, 5];
  arr.sort(function (a, b) {
  if (a > b) {
  return 1;
  } else {
  return -1;}})
简单一点就是
arr.sort(function (a, b) {            
return a - b; 
})

arr.sort((a,b) => a-b)
所以降序就是
arr.sort(function (a, b) {
return b - a;        
})

arr.sort((a,b) => b-a)
他比较的方法就是冒泡, 他这个函数会执行有限次
第一次比较20和9这两个位置, 第二次20跟4...balabalabala

那既然可以从无到有,那就能从有到无  : ) 

有序 ————> 无序
var arr = [1,2,3,4,5,6,7,8];
arr.sort(function(){
return Math.random() - 0.5;
}) 

数组只不过是特殊的对象,那按照对象之中的属性也能排

var BWM ={price:2000000}
var Porsche= {price:100000}
var Mercedes = {price: 12345678}

var arr = [BWM,Porsche,Mercedes];
arr.sort(function(a,b){
return a.age-b.age;
})

升序排列

结合一哈以前学的,按字节长度排

先写一个返回字节长度的方法 retBytes()
function retBytes(str) {      
      var num = str.length;      
      for (var i = 0; i < str.length; i++) {      
          if (str.charCodeAt(i) > 255) {          
          num++;             
   }        
    }          
  return num;
        }

然后依然是经典升序    
 var arr = ['a田', 'ab日', 'abc曰', 'gsdfdasf', 'vvv甲'];   
 arr.sort(function (a, b) {   
      return retBytes(a) - retBytes(b);   
});

只有以上七个方法能改变原数组

push 、pop 、shift 、unshift 、sort、reverse、splice

然后就是不改变原数组的了

1. concat

var arr = [1,2,3];
var arr1 = [4,5,6];
var arr2 = arr.concat(arr1);
//[1,2,3,4,5,6]

2.toString

把数组整成字符串

[1,2,3,4,5,6] -->"1,2,3,4,5,6"

3.slice

也是截取

俩参数
slice (从该位开始截取,截取到该位 )

一个参数
slice( 从该位截到最后 )

不写参数 整个截取(类数组转化为数组用)

4.join

按照你穿的参数把数组转化为字符串然后连起来

arr.join("-"); //"1-2-3-4-5-6"
记得里面最好要是字符串
不传参数就是按逗号连,如果join("");就能实现拼接

这里面就有一个互逆的 split,拆分用的

arr.split("-"); //"1","2","3","4","5","6"

(¦3[▓▓] 晚安