這是阿里2017秋季校招前端的一道筆試選擇題:
將數(shù)組var a=[1,2,3] 變成數(shù)組 [4,3,2,1] 下面的方式正確的是:
A、a.reverse().unshift(4)
B、a.push(4).reverse()
C、a.push(4); a.reverse()
D、a.splice(3,1,4).reverse()
A選項(xiàng):a.reverse()后返回值即數(shù)組a變成[3,2,1],再使用unshift()方法在數(shù)組開(kāi)頭添加一個(gè)4,a數(shù)組就變成了[4,3,2,1]。注,unshift()返回新數(shù)組的長(zhǎng)度,此處為4。正確。
B選項(xiàng):push()方法返回新數(shù)組的長(zhǎng)度,是一個(gè)number類型,不是數(shù)組,所以不能再用“.”操作符繼續(xù)執(zhí)行reverse()方法,報(bào)錯(cuò)(Uncaught TypeError),錯(cuò)誤。
C選項(xiàng):push()方法返回新數(shù)組的長(zhǎng)度,是一個(gè)number類型,此時(shí)a.push(4)后返回4,但數(shù)組a已經(jīng)變成[1,2,3,4],再對(duì)a用“.”操作符繼續(xù)執(zhí)行reverse()方法,得到[4,3,2,1]。正確。
D選項(xiàng):splice()語(yǔ)法:arrayObject.splice(index,howmany,item1,.....,itemX)。參數(shù):index:必需整數(shù),規(guī)定添加/刪除項(xiàng)目的位置,使用負(fù)數(shù)可從數(shù)組結(jié)尾處規(guī)定位置。howmany:必需。要?jiǎng)h除的項(xiàng)目數(shù)量。如果設(shè)置為 0,則不會(huì)刪除項(xiàng)目。item1, ..., itemX:可選。向數(shù)組添加的新項(xiàng)目。返回值:Array:包含被刪除項(xiàng)目的新數(shù)組,如果有的話。
由于a.splice(3,1,4)中的index為3,超過(guò)了數(shù)組a的下標(biāo),所以3后面的1也不會(huì)起作用。a.splice(3,1,4)會(huì)將4插入到數(shù)組a末尾。但splice()返回值是被刪除項(xiàng)目的新數(shù)組,由于a.splice(3,1,4)并沒(méi)有刪除元素,所以返回的新數(shù)組為空,對(duì)空數(shù)組reverse()還是空。(如果D選項(xiàng)改成a.splice(3,1,4);a.reverse()就正確了。錯(cuò)誤。
所以正確答案為:AC。
Array對(duì)象常用方法歸納:
不改變?cè)瓟?shù)組:
1、 concat()
連接兩個(gè)或多個(gè)數(shù)組
不改變?cè)瓟?shù)組
返回被連接數(shù)組的一個(gè)副本
var a = [1, 2, 3];
var b = [4, 5];
a.concat(b); // [1, 2, 3, 4, 5]
a // [1,2,3]
2、join()
把數(shù)組中所有元素放入一個(gè)字符串
不改變?cè)瓟?shù)組
返回字符串
var a = [1, 2, 3];
a.join(','); // "1,2,3"
a // [1,2,3]
3、 slice()
從已有的數(shù)組中返回選定的元素
不改變?cè)瓟?shù)組
返回一個(gè)新數(shù)組
var a = [1, 2, 3];
a.slice(1,2); // [2]
a // [1,2,3]
4、 toString()
把數(shù)組轉(zhuǎn)為字符串
不改變?cè)瓟?shù)組
返回?cái)?shù)組的字符串形式
var a = [1, 2, 3];
a.toString(); // “1,2,3”
a // [1,2,3]
改變?cè)瓟?shù)組:
5、 pop()
刪除數(shù)組最后一個(gè)元素,如果數(shù)組為空,則不改變數(shù)組,返回undefined
改變?cè)瓟?shù)組
返回被刪除的元素
var a = [1, 2, 3];
a.pop(); // 3
a // [1,2]
6、 push()
向數(shù)組末尾添加一個(gè)或多個(gè)元素
改變?cè)瓟?shù)組
返回新數(shù)組的長(zhǎng)度
var a = [1, 2, 3];
a.push(4); // 4
a // [1,2,3,4]
7、 reverse()
顛倒數(shù)組中元素的順序
改變?cè)瓟?shù)組
返回該數(shù)組
var a = [1, 2, 3];
a.reverse(); // [3,2,1]
a // [3,2,1]
8、 shift()
把數(shù)組的第一個(gè)元素刪除,若空數(shù)組,不進(jìn)行任何操作,返回undefined
改變?cè)瓟?shù)組
返回第一個(gè)元素的值
var a = [1, 2, 3];
a.shift(); // 1
a // [2,3]
9、 sort()
對(duì)數(shù)組元素進(jìn)行排序(ascii)
改變?cè)瓟?shù)組
返回該數(shù)組
var a = [1, 3, 2];
a.sort(); // [1,2,3]
a // [1,2,3]
10、 splice()
從數(shù)組中添加/刪除項(xiàng)目
改變?cè)瓟?shù)組
返回被刪除的元素
var a = [1, 2, 3];
a.splice(2,1,4); // [3]
a // [1,2,4]
11、 unshift()
向數(shù)組的開(kāi)頭添加一個(gè)或多個(gè)元素
改變?cè)瓟?shù)組
返回新數(shù)組的長(zhǎng)度
var a = [1, 2, 3];
a.unshift(4); // 4
a // [4,1,2,3]