数组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)));
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);
排序⽅法
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()
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()
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()
4.Array.prototype.map()(用的最多的一个)
批量删除
5.Array.prototype.forEach()
⽅法⽤于调⽤数组的每个元素,并将元素传递给回调函数。
参数:函数(item,index,arr)返回 :无 修不修改原数组:不修改