前面我们以及说过了,变量的一些基础知识,这章我们将来看看特殊一个变量数组。在其他语言中我们可以知道,数组一般存储的是相同类型的数据且是固定数量的,不允许不同也不允许随意改变长度,但是由于js的天然弱语言类型,所以我们的数组中可以存储不同类型的数据。同时可以动态调整数组的长度。下面我们来进入数组的世界
一:数组的创建
在js中我们有两种方法,
1.1 Array构造函数
第一种采用Array构造函数,其构造函数接受两种数据格式,如果参数为数字且只有一个参数,则创建传入参数大小的数字,如果是非数字,则根据arguments来创建数组。我们来看以下代码
var a = new Array(12); // [empty*12]
var b = new Array('1','2','3') // [1,2,3];
1.2 数组字面量
数组字面量方法是通过[],每一项通过逗号分隔
var a = [1,2];
var b = [];
二:数组的检查以及转换
2.1 数组的检查
我们在前面已经说过可以通过typeof 方法来检查数据的类型,那么我们看下下面的代码
typeof [1,2];//object
我们在前面说到过,通过typeof方法只能返回6大数据类型(参看数据类型篇)所以我们在这里需要通过另一个方法来判断,那就是通过instanceof Array方法来判断
[1,2] instanceof Array;// true
所以如果我们需要判断一个数据是否是数组,我们可以通过以下方法来判断
function isArray(data){
return typeof data === 'object' && data instanceof Array;
}
当然我们还有更简单的检查方法,那就是通过Array.isArray来判断
Array.isArray([1,2,3]) // true
2.2 数据转换
在上一章数据类型转换中我们提到了对象的数据转换。我们在这章中详细看下一个数组转换成字符串的过程。例如我们现在需要将一个数组[1,2]转换成字符串
var a= [1,2];
//1:首先执行数组的valueOf 方法
console.log(a.valueOf())//返回[1,2]
// 2:有valueOf方法,返回值不是基本数据类型。调用toString方法
console.log(a.toString())//'1,2'
根据上面的步骤我们可以实现我们的底层实现方法
function obj2str(data){
if(Object.hasOwnProperty.call(data,'valueOf') && ['number','string','number'].includes(data.valueOf())) {
return data.valueOf();
} else {
return data.toString();
}
3:常见方法
push(元素):从数组的尾部添加元素
unshift(元素):从数组的头部添加元素
pop():从数组的头部移除元素
shift():从数组的尾部移除元素
sort(function?)数组的升序,具体的规则根据所传入的方法来定,如果没有传入方法则采用默认规则通过冒泡排序[算法排序篇](后面补充后添加)进行升序,默认规则如下:
1:将前项与后项转换成字符串
2:如果前项在后项前面,则返回false,不升序,相同不变,否则,返回ture,升序
因此我们可以来实现底层的sort基本升序规则方法
var a = [1,3,2,4];
a.sort((a,b)=> a-b;)
reverse(function?)数组的降序,规则同sort
concat(a,b....)创建一个新数组,将数组进行合并,不会改变原有的数组
slice(number1,number2?)创建一个新数组,从原有数组的number1位置,直到number2索引位置数据,如果number2不存在,则到最后,如果number存在,且是正整数,则直接到number2所在所在索引,如果是负数,则到数组长度+number2。如果相加后以及原本起始位置,小于结束位置,则返回空数组。所以我们可以实现下底层代码逻辑
Array.property.slice = function(){
var stat = arguments[0];
let num2 = arguments[1];
var end = this.length;
if(num2) {
if(num2 < 0) {
end = this.length + num2;
}
if(start >= end) {
//返回空数组
} else {
//取stat-数组末尾间的数据返回
}
} else {
//取stat-数组末尾间的数据返回
}
}
splice(index,number?,元素?):从原有数组中移除或者添加或者替换元素,如果number存在,且大于0,则将原有数组index位置处的数据移除,且返回。如果需要添加的元素(可以是多个)存在,则将需要添加的元素插入到index位置处
indexOf(需要查找的元素|function):如果传入的是元素,则从数组中找到此元素的位置,不在数组中返回-1.如果传入的是函数,则会按照函数的规则进行查找。
lastIndexOf(需要查找的元素|function)查找最后的一个匹配的,规则同inexOf
every(function)根据传入的函数,来判断数组中的每一项是否都满足,如果都满足,返回true,否则返回false
some(function)根据传入的函数,来判断数组中的是否有一项满足,如果有一项满足,返回true,否则返回false
filter(function)根据传入的函数,来过滤数组中的每一项,返回满足调条件的元素的数组
forEach(function)根据传入的函数,来对数组的每一项进行处理,不返回任何信息
map(function)根据传入的函数,返回每一项执行后的结果数组
reduce(function(pre,current,index,array))根据传入的函数,来对前一项和当前项进行归并处理,返回最终值
reduceRight(function(pre,current,index,array))根据传入的函数,来对前一项和当前项进行归并处理,返回最终值,但是其方法是从数组的最后一项开始
至此关于数组以及常见方法,我们就说到这了,下一章我们将来看看另一个特殊的变量,函数
网友评论