这是我参与新手入门的第2篇文章
前言
每天一题算法,生活都充实了!正当我开心的沉醉在算法中,突然发现JavaScript
不支持真正的多维数组,只能使用数组的数组来模拟。让我感受到自己才疏学浅,于是乎,开始重温Array
吧。
大致分为以下几类:
数组的方法这里就不多说了,直接参考MDN,里面的帮助文档写的详细。
(数组的长度是0到232-1之间的整数)
稀疏数组
所谓稀疏数组,指的是元素没有连续索引的数组,length
属性的值大于元素数,例如:[0,,2]。通俗的来讲就是数组中有间隙。
可以用Array()构造函数,或者给大于元素长度的索引赋值来创建稀疏数组。
var sparseArr1 = new Array(10); //数组长度为10且没有元素
var sparseArr2 = [];
sparseArr2[9] = 0; //元素为0,数组的长度为10
也可以通过字面量来创建
var sparseArr1 = [1,,3]; //有两个元素,但数组长度为3
var sparseArr2 = [,]; //没有元素,数组长度为1
var sparseArr2 = [,,]; //没有元素,数组长度为2
多维数组
说到多维数组,不是很简单嘛,先来个二维数组:[[1],[2]]
。深受Java的影响,为了申明一个二维数组的变量,于是我便大胆猜测var arr = new [][];
然而,console里UncaughtSyntaxError:Unexpectedtoken′]′亮闪闪的红色字体映入眼帘。
怎么回事呢,JavaScript
不支持真正的多维数组,可以使用数组的数组来模拟。以下才是常规操作:
var arr = new Array(5);
for(var i = 0; i < arr.length; i++){
arr[i] = [1];
}
首先定义一个数组arr
,遍历arr
数组中每一项并且赋值为数组[1]
,arr
就变成[[1],[1],[1],[1],[1]]
这样的二维数组啦。
亦或是直接字面量:
var arr = [[1],[1]];
高级一点的写法:
var arr = Array.apply(null,{length:2}).map(value => value = [1]);
此处arr
的值为[1,1]。Array.apply(null,{length:2})
是用来创建有初始化的数组,其结果为[undefined,undefined]
;与Array(2)
没有初始化的结果[,]
有所不同。
需要注意的是:
类数组
类数组,顾名思义:类似数组但不是数组的对象,不能够全部使用数组的方法。满足类数组的条件:
例1:
var obj = {
0 : 'STA',
1 : 'SUN',
length : 2
}
var arr = Array.from(obj); //['STA','SUN']
obj
以数字作为属性名并且有length
属性,因此obj
是一个类数组对象。当然可以通过Array.from()
来将类数组转成数组。
例2:
var str = '123';
var arr = Array.from(str); //['1','2','3']
字符串也可以看作类数组。
例3:
function foo(){
console.log(arguments);
//Arguments(2) [1, 2, callee: ƒ, Symbol(Symbol.iterator): ƒ]
console.log(arguments.length); //2
}
foo(1,2);
同样arguments
也是一个类数组,arguments
作为函数外部传入实参的集合,如果对参数进行处理,需要用到数组的方法,直接调用方法是不可取的。那么有办法让类数组中的数据使用数组的某些方法呢?当然是可以的:
function foo(){
let arr = Array.prototype.map.call(arguments,value => value + 1);
console.log(arr); //[2,3]
}
foo(1,2);
从上例可以看到,我们可以通过call
改变数组map的执行环境,从而使类数组中的数据使用map
方法;也可以先将类数组通过Array.from()
转变成数组再进行map
操作。
总结
稀疏数组是元素没有连续索引的数组;JavaScript
不支持真正的多维数组,可以使用数组的数组来模拟;类数组需要有length
属性以及数字属性名。
当然,写的可能不是很详细,或是错误的地方,欢迎大家补充、指正。
常见问题FAQ
- 免费下载或者VIP会员专享资源能否直接商用?
- 本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
- 提示下载完但解压或打开不了?
- 找不到素材资源介绍文章里的示例图片?
- 模板不会安装或需要功能定制以及二次开发?
发表评论
还没有评论,快来抢沙发吧!