5、JavaScript的Array类型

Array数组

数组的定义

var arr = [10];//字面量,定义了一个只有一个元素10的数组
var arr = new Array(10);//构造方法,当()内只有一个参数时,定义了长度为10的空数组。

数组的方法都来自于Array.prototype,字符串的方法都来自于String.prototype。

数组的方法

改变原数组
方法名 作用
a.push(1,2,3) 数组后面加元素,返回添加后的长度
a.pop() 删除最后一个元素,并返回删除的元素。不需要参数
a.shift() 删除第一个元素,并返回删除的元素。不需要参数
a.unshift(1,2,3) 数组前面加元素,返回添加后的长度
a.reverse() 逆转数组的顺序,返回操作后的数组
a.sort(function(){}) 按照ascii排序,返回排序后的数组。
a.splice(2,1,3,3,3) 数组截取,返回截取后的数组,原数组为剩下的。(更多看下面)
a.copyWithin(2,4) 把a[4]的元素把a[2]替换掉(令a[2]==a[4])
a.fill(1); 把a数组的元素用1替换掉
pop、push、ushift、unshift

关于splice和sort

//splice方法
var arr = [1,2,3,4,5];
var t = [];
/*
    * splice(x,y,z1,z2,z3...)
    * x:第[x]位开始删除,如果为负数表示倒数第几位
    * y:删除多少个
    * z:在切口处添加数据(不限个数)
    * 返回值是被删除数据组成的数组
*/
t = arr.splice(2,1,"a","b","c");//t=[3],arr=[1,2,"a","b","c",4,5]

splice(index,num,addItem1,addItem2...)

//sort方法
var arr = [1,3,5,4,10];
/*
    *sort(function(a,b){..写逻辑..})
    * 1、必须写两个形参
    * 2、看返回值 ->返回值为负数,那么a排在前面
    *           ->返回为正数,a排在后面后面
    *           ->为0,不动
    * 3、传参方式符合冒泡排序即:01,02,03,04,12,13,14,23,24,34(数字为索引)
*/
arr.sort(function(a,b){
    if(a>b){
        return 1;
    }else{
        return -1;
    }
})//升序排序
不改变原数组
方法名 作用
a.concat(b) 连接两个数组,返回新数组
a.toString() 返回字符串形式的数组
a.slice(x,y) 0个参数:整个数组截取返回; 1个参数:从[x]位开始到最后; 2个参数:从第[x]位开始截取到第[y]位,返回截取的数组
a.join("-") 把数组元素用参数的符号连接,返回连接后的字符串。参数必须是字符或字符串。
split()是字符串-->数组,join()数组-->字符串
a.indexOf("值") 返回"值"在a数组里面的索引号,没有则返回-1。
a.lastIndex('值') 返回最后一个此值的索引号,找不到为-1
a.keys() 返回一个迭代器,包含数组每个元素的索引值。↓
arr.flat(n) 数组扁平化,n为层数,默认为1.
a.includes(1) a数组是否包含1,返回boolean
a.some(function(){}) 用于检测数组中是否含有符合条件的的元素。返回值是boolean,找到第一个符合条件的元素即停止遍历。↓
a.every(function(){}) 判断a里面的元素是否都符合函数的条件。↓
a.filter(function(){}) 返回符合函数条件的元素↓
a.foreach(function(){}) 把数组的每个元素遍历传入函数并执行,无返回值。↓
a.map(function(){}) 把a数组里面的每一个元素遍历传入函数并处理,返回每个元素被处理后的数组。↓
a.reduce(function(pre,value){},0) 汇总数组里元素。↓

字符串有一个方法:str.split("-")把字符串按照 “-” 拆分,返回数组。这与join相对应。

有回调函数的方法,回调函数的参数都是(value,index,arr)

这个特殊:reduce第一个参数是回调函数(preValue,value,index,arr),第二个是preValue.

some:有一项成立就返回true

//some方法用于检测数组中是否含有符合条件的的元素。返回值是boolean,找到第一个符合条件的元素即停止遍历
const arr = [1,2,3,4,5,6]
let flag = arr.some((value)=>{
    return value%5==0;
})
console.log(flag);//true
//检测数组中是否有5的倍数

every:全部成立才返回true

//every方法判断a里面的元素是否都符合函数的条件。
const arr = [5,10,15,20]
let flag = arr.every((value)=>{
    return value%5==0;
})
//判断数组中的元素是否都是5的倍数

参数都是(function(value,index,arr,){},thisArg),thisArg很少用。

filter:筛选数组元素

//filter创建一个新数组,新数组的元素是符合条件的传入数组元素。
var a=[1,2,3,4,5]
var b=a.filter(function(value,index,arr){
    return a>2;//筛选>2的数组元素,如果符合条件则把此元素放到新数组。
});
console.log(b);
//打印[3,4,5]

foreach:单纯的遍历数组,无返回值
如何跳出forEach循环?使用try...catch配合throw new Error('...')。

//foreach
var a=[1,2,3,4,5];
a.forEach(
    function(value,index,arr){
        console.log("每一个数组元素"+value);
        console.log("每一个数组元素索引"+index);
        console.log("数组本身"+arr);
    });
//回调函数可以只要部分形参

map:处理每个元素
如果没有return的话,默认return undefined。

//map 把a数组里面的每一个元素遍历传入函数并处理,返回每个元素被处理后的数组。
var a=[1,4,6,8,9];
var b=a.map(function(z){
    return z*2;
})
console.log(b);
//打印[2, 8, 12, 16, 18]

reduce

//reduce累计数组里元素。
var  arr = [1, 2, 3, 4];
var add = arr.reduce(function(accumulator,value,index,arr){
  //第一次遍历把第二个参数(0)作为accumulator,把数组[0]作为value传入函数,
  //函数里面的return值作为第二次遍历的accumulator,直到遍历完成。
  console.log(value);
  return accumulator + n;
},0);
console.log(add); //求和

var a = eval(arr.join('+'));//数组汇总最快捷的方法

keys

//keys返回一个迭代器,包含数组每个元素的索引值。
var a=[1,4,6,8,9];
var b=a.keys();
for (var i of b) {
    console.log(a[i]);
}
//打印1,4,6,8,9

类数组

类数组就是一个对象,arguments就是一个类数组,但是实质上他是一个对象

类数组:

  • 利用属性名模拟数组特性
  • 动态增长length属性
  • 给类数组定义push方法,可以根据length进行属性扩充
  • 添加splice方法。
    var obj = {
        "0":"a",
        "1":"b",
        "2":"c",
        "length":3,
        "push":Array.prototype.push,
        "splice":Array.prototype.splice
    }
    obj.push("d");

    /*类数组中:属性要为索引(数字)属性
              必须有length属性
              最好加上push,方便为类数组添加属性。

    push方法中会根据length新增新的索引和值。
    Array.prototype.push = function(target){
        obj[obj.length] = target;
        obj.length++
    }
    */

类数组既有对象的特性又有数组的特性,所以在开发中很常用。

数组去重

利用类数组进行数组去重。

var arr = [1,2,3,0,1,1,2,2,9,9,10];
Array.prototype.unique = function(){
    var temp = {},
        a = [],
        len = this.length;
    for (var i=0;i<len;i++){
        if (temp[arr[i]]==null){
          temp[arr[i]] = '占坑';
          //数组元素作为属性名,"占坑"作为属性值,下一次循环到这个数,因为这个属性已经存在所以不遍历
          a.push(arr[i]);
        }
    }
    return a;   
}
var a = arr.unique();
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。