JavaScript数组你都掰扯不明白,简历上你敢写精通JavaScript?

一、如何判断一个对象是不是数组?

在只有一个全局作用域的时候,使用instanceof操作符就足矣:


if(value instanceof Array){

//操作数组

}

1

2

3

使用instanceof的前提是只有一个全局执行上下文,如果网页里有多个框架,则可能涉及两个不同的全局上下文,因此就会有两个不同版本的Array构造函数。如果要把数组从一个框架传到另一个框架,则这个数组的构造函数将有别于第二个框架内本地创建的数组。

为了解决这个问题,ECMAScript提供了 Array.isArray()方法。这个方法的目的就是确定一个值是否为数组,而不用管它是在哪个全局执行上下文中创建的。


if(Array.isArray(value)){

//操作数组

}

1

2

3

二、填充方法fill()

1、ES6新增了两个方法

批量复制方法copyWithin(),以及填充数组方法fill()。

这两个方法的函数比较类似,都需要指定既有数组实例上的一个范围,包含开始索引,不包含结束索引,使用这个方法不会改变数组的大小。


2、fill()

使用fill()方法可以向一个已有的数组中插入全部或部分相同的值。开始索引用于指定开始填充的位置,它是可选的。如果不提供结束索引,则一直填充到数组末尾。负值索引从数组末尾开始计算。


例如:


(1)用1填充整个数组


const arr = [0,0,0,0,0]

arr.fill(1);//[1,1,1,1,1]

arr.fill(0);//[0,0,0,0,0]//重置为0


(2)用2填充索引大于等于2的元素


arr.fill(2,2);//[0,0,2,2,2]

arr.fill(0);//[0,0,0,0,0]//重置为0


(3)使用3填充索引大于等于1且小于3的元素


arr.fill(2,1,3);//[0,3,3,0,0]


(4)用4填充索引大于等于1且小于4的元素


arr.fill(4,-4,-1);//[0,4,4,4,0]


注意:fill()会自动忽略超出数组边界、零长度及方向相反的索引范围。


三、复制方法copyWithin()

copyWithin()会按照指定范围浅复制数组中的部分内容,然后将他们插入到指定索引开始的位置。


例如:


let arr,

    reset = () => arr = [0,1,2,3,4,5,6,7,8,9];

reset();

1

2

3

(1)从arr中复制索引5开始的内容,插入到索引0开始的位置


arr.copyWithin(0,5);//[5,6,7,8,9,5,6,7,8,9]

reset();


//从arr中复制索引0开始到索引3结束的内容,插入到索引4开始的地方


arr.copyWithin(4,0,3);//[0,1,2,3,0,1,2,7,8,9]


四、栈方法

ECMAScript给数组提供了相当于栈操作的方法。

栈是一种后进先出(LIFO,Last-In-First-Out)的结构,也就是最近添加的元素先被删除。

插入push();

删除pop();


五、队列方法

队列以先进先出(FIFO,First-In-First-Out)形式的结构。

插入push();

取出shift();


六、排序方法

数组有两个方法可以用来对元素进行重排序:


reverse()

sort()

七、操作方法

1、合并concat()

2、切割slice()

slice()用于创建一个包含原有数组中一个或多个元素的新数组。


八、搜索和位置方法

ECMAScript提供两类搜索数组的方法,按严格相等搜索和按断言函数搜索。


1、严格相当搜索

ECMAScript提供了3中严格相等的搜索方法:


indexOf()

lastIndexOf()

includes()

2、断言函数

find()

findIndex()

九、迭代方法

1、every()和some()

every()对数组每一项都进行传入的函数,如果对每一项函数都返回true,则这个方法返回true。

some()对数组每一项都运行传入的函数,如果有一项返函数返回true,则就返回true。

例如:


let nums = [1,2,3,4,5,4,3,2,1];

let ret = nums.every((item,index,array) => item > 2);//false

ret = nums.some((item,index,array) => item > 2);//true

1

2

3

2、filter()

filter()是基于给定的函数来决定某一项是否应该包含在它返回的数组中。

比如,要返回一个所有元素都大于2的数组:

let ret = nums.filter((item,index,array) => item>2);//[3,4,5,4,3]


3、map()

map()返回一个数组,这个数组的每一项都是原始数组中同样位置的元素进行传入函数而返回的结果。

例如,对数组中的所有元素都乘以2:

let ret = nums.map((item,index ,array) => item * 2);//[2,4,6,8,10,8,6,4,2]


4、foreach()

foreach()只会对每一项运行传入的函数,没有返回值。本质上foreach()就相当于for循环遍历数组。


nums.foreach((item,index,array) => {

//执行某些操作


请使用浏览器的分享功能分享到微信等