前端面試題:寫出刪除非空數組最後一個元素並使數組長度減一的幾種方法

javascript絕對是計算機語言最複雜的語言之一,與最近上映的《美人女》同樣細思極恐,簡單、平靜的表面下釀醞着巨大能量。javascript

這是一道js core的基礎題,考察應聘者的掌握的基礎知識。java

注意審題,你寫出的方法不但須要刪除最後一個元素,而且數組長度須要縮減。數組

通常能想到的第一種方法是彈出數組最後的一個值:ip

var a = [2,3,4];
a.pop();
console.log(a);內存

[2, 3]字符串

這個方法很好地完成了任務。console

最思考下來,能夠考慮經過js的核心方法slice,這個方法既能操做字符串,亦能操做數組:基礎

var a = [2,3,4];
a = a.slice(0,-1);
console.log(a);
[2, 3]遍歷

這個方法重組構造了數組,取原數組的一部份。能完成這個功能的還有splice方法:技巧

var a = [2,3,4];
a.splice(-1,1);
console.log(a);

[2, 3]

nice,已經擁有了三種方法。

注意,splice與slice不一樣,它返回的是含被刪除元素的數組。

還有沒有?還有。

在js中,數組的長度length屬性是可讀可寫的,若是將其長度減1,那麼最後一個元素天然被刪除了:

var a = [2,3,4];
a.length -= 1;
console.log(a);
[2, 3]

如今已經有四種方法了,還有沒有其它方法呢,應該是還有的,好比遍歷後再賦值空數組,丟棄最後一個元素;反轉數組後shift第一個,再反轉等等,這些都不是很好的技巧。

那麼能不能使用delete呢?delete是能夠刪除數組元素的,但它並不能使數組長度減1:

var a = [2,3,4];
delete a[a.length - 1];
console.log(a,a.length);

[2, 3, undefined] 3

能夠看到,被刪除元素不存在,不佔用內存空間,它的值被設爲undefined,但,長度仍舊不變。

js 中,超出數組最大長度的值都爲undefined。

同理,若是將最後一個元素設爲undefined,它的值雖然被刪除,但數組長度是不變的。

var a = [2,3,4];
a[a.length - 1] = undefined;
console.log(a,a.length);
[2, 3, undefined] 3

以上問題基於ECMAscript v3/javascript 1.5/JScript 5.5。

若是有更好的方法能夠探討。

相關文章
相關標籤/搜索