Javascript数组

数组Api

数组序列化
var arr = [1,2,3,4,5,{a:1}];
console.log(arr.toString(),typeof(arr.toString()));
console.log(arr.join(" "),typeof(arr.join()));
//序列化,转化json格式字符串
var res = JSON.stringify(arr);
console.log(res,typeof res);
//反序列化 将json数组转化为普通数组
console.log(JSON.parse(res));

构造函数的⽅法

1.Array.isArray()

var  a = 10;
var  b = 'hello';
var  c = [];
var  d = {name:'zhangsan'}
console.log(Array.isArray(a));
console.log(Array.isArray(b));
console.log(Array.isArray(c));
console.log(Array.isArray(d));

2.Array.from()

从类数组对象或者可迭代对象(字符串也可以遍历,因为他是迭代的)中创建⼀个新的数组实例。

//array.from() 
 var str = 'hello'
console.log(Array.from(str),Array.isArray(Array.from(str)));

3.Array.of()
根据⼀组参数来创建新的数组实例,⽀持任意的参数数量和类型
 var arr = Array.of(10);
var arr1 = new Array(10);
console.log(arr,arr1)

一个长度为一,一个长度为十,使用of,都会把里面的内容当成元素,使用array表示长度

栈与队列⽅法

考题 那些方法修改原数组长度    :push,pop,shift,unshift,sort,reverse

1.Array.prototype.push()(考点多)

push方法是原型对象里面有的,实例是继承的

⽅法可向数组的末尾添加⼀个或多个元素,并返回新的⻓度。

var  arr =['hh','ss','gg','aa'];
var  res = arr.push('rr','vv');
console.log(arr,res);

参数:要添加的元素 返回值: 长度 修不修改原数组:修改

2.Array.prototype.pop()

⽅法⽤于删除数组的最后⼀个元素并返回删除的元素。他是会改变数组长度

var  arr =['hh','ss','gg','aa'];
 var res=arr.pop();
 console.log(res,arr);

参数:要添加的元素 返回值: 删除的元素,最后一项     修不修改原数组:修改

如何自己写一个(重构)mypop方法,然后数组实例调用自己写的方法,应该写在哪里才能被调用?

调用的pop和push在原型对象array.prototype里面,所以mypop应该写在原型对象prototype

var  arr =[];
Array.prototype.myPop = function (name){
    //由于被实例调用,所以this指向数组实例
    if(this.length>0){
        var last = this[this.length-1];
    this.length--;
    return last;
    }else{
        return undefined
    }
}
var res = arr.myPop();
console.log(res,arr);

重构mypush方法,要如何让重构?

不能拿形参接受(不确定实参有多少个),拿arguments接受所有添加的参数。把参数循环遍历之后放在数组末尾

var  arr =['hh','ss','gg','aa'];

Array.prototype.mypush = function (){
    //把参数循环遍历之后放在数组末尾
   for(let i=0;i<arguments.length;i++){
      this[this.length]=arguments[i];
     
   }
   return this.length;
}
var  res = arr.mypush('qq','ww');
console.log(res);

3.Array.prototype.shift()
把数组的第⼀个元素从其中删除,并返回第⼀个元素的值。
参数:无 返回值:返回回第⼀个元素的值 修不修改原数组:修改
4.Array.prototype.unshift()
⽅法可向数组的开头添加⼀个或更多元素,并返回新的⻓度。
参数:无 返回值:⻓度       修不修改原数组:修改 
排序⽅法

1.Array.prototype.reverse()

var arr = [1,2,3,4,5]
var res = arr.reverse();
console.log(arr,res);

var str ='i love china'
 var arr2 =str.split(' ');
 var res2 = arr2.reverse();
 console.log(str,res2);

2.Array.prototype.sort()

参数:无 返回值:排序后的数组     修不修改原数组:修改 

参数:function(a,b){} 返回值: 排序后的数组     修不修改原数组:修改 (升序a-b 降序 b-a)

操作⽅法

1.Array.prototype.concat()

于连接两个或多个数组。该⽅法不会改变现有的数组,⽽仅仅会返回被连接数组的⼀个副本。

参数:需要拼接的数组  返回值:拼接好的数组    修不修改原数组:不修改

var arr =[1,2,3]
var arr1 =[8,2,4]
var arr2 =[9,3,3]
var res=arr.concat(arr1,arr2)
console.log(arr,res)

2.Array.prototype.slice()

⽅法可提取字符串的某个部分,并以新的字符串返回被提取的部分
参数:l两个参数 start,end(不包含end的元素)(负数为倒数的)  返回值:截取的部分   修不修改原数组:不修改
var arr = ['hello','qqqq','adf',5,9,'aacs',3,7,0];
var res = arr.slice(3,6);
console.log(arr,res);

3.Array.prototype.splice()

既可以添加,也可以删除(从何处,不一定开头结尾)

参数:index(必须写),howmany(删除的个数),要添加数组元素    返回值:   修不修改原数组:修改

var arr = [1,2,3,4,5,6]
var res = arr.splice(2,2,'bb','ff')
console.log(res,arr);

位置⽅法

1.Array.prototype.indexOf()

可返回数组中某个指定的元素位置。
参数:item(查找元素必须),start   返回值:第一次的索引  ,找不到就-1  修不修改原数组:不修改
var arr = [1,'2',3,4,5,6,'2']
var res = arr.indexOf('2',1)
console.log(res,arr);

2.Array.prototype.lastIndexOf()

从后往前查

迭代⽅法

1.Array.prototype.every()

⽅法⽤于检测数组所有元素是否全部符合指定条件(通过函数提供)。

底层循环遍历没一个数组

参数:函数(item,index,arr)返回  true(全部) false  修不修改原数组:不修改

2.Array.prototype.some()

于检测数组中的元素是否满⾜指定条件(函数提供)。

参数:函数(item,index,arr)返回  true(只要有一个符合) false  修不修改原数组:不修改

3.Array.prototype.filter()

创建⼀个新的数组,新数组中的元素是通过检查指定数组中符合条件的所有元素。
参数:函数(item,index,arr)返回 :符合条件的数组与组合成新数组  修不修改原数组:不修改

4.Array.prototype.map()(用的最多的一个)

批量删除

⽅法返回⼀个新数组,数组中的元素为原始数组元素调⽤函数处 理后的值
参数:函数(item,index,arr)返回 :新数组  修不修改原数组:不修改

5.Array.prototype.forEach()

⽅法⽤于调⽤数组的每个元素,并将元素传递给回调函数。

参数:函数(item,index,arr)返回 :无  修不修改原数组:不修改

  • 7
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值