今天主要梳理一下数组的相关内容:
var arr=[1,2,6];
数组有以下几个特点:
- 有序性
- 紧密型
- 关联性
- 数据的添加和查找都是按照索引(下标)
- 数组中存储的元素的总量是可变的
- 数组长度的改变会引起数组的改变
- 数组被创造出大量的方法使用它,造成API过多
- 数组必须按照索引顺序依次排列
- 数组的删除 添加 查找都是很耗费时间的 因为每次都需要重新去排列每个元素
一、数组的常用方法:
pop push shift unshift map forEach filter some every reduce
concat join slice splice indexOf lastIndexOf fill sort reverse toString()
1、对数组增加删除,原数组都会改变
1 push:在数组末尾添加一个元素,并返回长度,原数组改变
2 pop:删除数组尾部的元素,并返回删除的元素,原数组改变
3 shift:删除第一个元素,并返回删除的元素**,原数组改变**
4.unshift:在数组的第一位前面添加一个元素并返回长度,元素组改变
2、遍历数组
1 map :有返回值,回调函数有三个参数,第一个是元素,第二个是索引,第三个是数组,返回一个新的数组
2 forEach :无返回值,回调函数有三个参数,第一个是元素,第二个是索引,第三个是数组
3、按需求返回结果
1 some 主要有部分数组元素满足条件就返回true,
2 every 所有的数组元素都要满足条件才会返回true
3 filter 返回一个新的数组,数组内容是满足条件的,返回一个新的数组
4、数组的查找
1 find 返回满足条件离他最近的那个元素
2 indexOf 查找某一个元素是否在数组中,返回值大于-1即为找到,否则说明该元素不存在
3 lastIndexOf 从后往前查找
5、数组的转换
1、sort : 从大到小或从小到大排列
2、reverse:反转
3、toString():转成字符串
6、其它
1、concat:连接两个数组
2、slice:截取元素,返回一个新的数组,原数组不改变
3、splice:截取、替换元素,返回一个截取后的新数组,原数组发生改变
join:用特定的符号连接数组
二、数组的判定
1、es6: Array.isArray(obj);
2、es5
arr.constructor === Array;
Objec.prototype.toString.call(arr)=="[object Array]";
三、数组的转换
1、es6
Array.from(arr)
2、es5
Array.prototype.concat.apply([ ],inputs);
Array.prototype.slice.call(inputs);
[ ].slice.call(inputs);
[ ].concat.apply([ ],inputs);
解析:重构一下slice方法:
主要用到的知识点:
1/ Array.prototype.slice=b.slice();[b指的是实例化的对象]
2/ call,apply改变this指向
class Array1{
constructor(){
}
slice(start,end){
console.log(this);
start=Number(start);
end=Number(end);
if(isNaN(start))start=0;
if(isNaN(end))end=this.length;
if(start<0)start+=this.length;
if(end<0)end+=end+this.length;
var arr=[];
for(var i=start;i<end;i++){
arr.push(this[i]);
}
return arr;
}
}
var b = new Array1();
//看出以下三种方式都可以将列表转为数组,通过改变了this的指向
var c= b.slice.call(inputs);
var d = b.slice.apply(inputs);
//这里的this通过call改变了后,由原先的Array1类,变成了inputs这个列表
// var test = Array1.prototype.slice.call(inputs);
console.log(test,c,d);
四、数组的一些方法的应用
1、利用filter方法进行数组去重
var arr=[1,5,6,8,9,4,5];
var test = arr.filter((item,index)=>{
return arr.indexOf(item,index+1)<0;
})
console.log(test)
2、利用reduce方法可以进行归并求和【购物车求价钱总和:已经选择的价钱】
var arr6 = [
{id:1001,price:100,selected:false},
{id:1002,price:100,selected:true},
{id:1003,price:100,selected:true},
{id:1004,price:100,selected:false},
]
var sum = arr6.reduce((value,item)=>{
value += item.selected ? item.price : 0;
return value;
},0);
console.log(sum);
3、数组可以存储多种类型的数据,数组型对象也是使用比较多的