前端面试题:写出删除非空数组最后一个元素并使数组长度减一的几种方法
2016-02-15 00:47
543 查看
javascript绝对是计算机语言最复杂的语言之一,与最近上映的《美人女》一样细思极恐,简单、平静的表面下酿酝着巨大能量。
这是一道js core的基础题,考察应聘者的掌握的基础知识。
注意审题,你写出的方法不但需要删除最后一个元素,并且数组长度需要缩减。
一般能想到的第一种方法是弹出数组最后的一个值:
最思考下来,可以考虑通过js的核心方法slice,这个方法既能操作字符串,亦能操作数组:
注意,splice与slice不同,它返回的是含被删除元素的数组。
还有没有?还有。
在js中,数组的长度length属性是可读可写的,如果将其长度减1,那么最后一个元素自然被删除了:
那么能不能使用delete呢?delete是可以删除数组元素的,但它并不能使数组长度减1:
js 中,超出数组最大长度的值都为undefined。
同理,如果将最后一个元素设为undefined,它的值虽然被删除,但数组长度是不变的。
如果有更好的方法可以探讨。
这是一道js core的基础题,考察应聘者的掌握的基础知识。
注意审题,你写出的方法不但需要删除最后一个元素,并且数组长度需要缩减。
一般能想到的第一种方法是弹出数组最后的一个值:
var a = [2,3,4];
a.pop();
console.log(a);
[2, 3]
这个方法很好地完成了任务。a.pop();
console.log(a);
[2, 3]
最思考下来,可以考虑通过js的核心方法slice,这个方法既能操作字符串,亦能操作数组:
var a = [2,3,4];
a = a.slice(0,-1);
console.log(a);
[2, 3]
这个方法重组构造了数组,取原数组的一部份。能完成这个功能的还有splice方法:a = a.slice(0,-1);
console.log(a);
[2, 3]
var a = [2,3,4];
a.splice(-1,1);
console.log(a);
[2, 3]
nice,已经拥有了三种方法。a.splice(-1,1);
console.log(a);
[2, 3]
注意,splice与slice不同,它返回的是含被删除元素的数组。
还有没有?还有。
在js中,数组的长度length属性是可读可写的,如果将其长度减1,那么最后一个元素自然被删除了:
var a = [2,3,4];
a.length -= 1;
console.log(a);
[2, 3]
现在已经有四种方法了,还有没有其它方法呢,应该是还有的,比如遍历后再赋值空数组,丢弃最后一个元素;反转数组后shift第一个,再反转等等,这些都不是很好的技巧。a.length -= 1;
console.log(a);
[2, 3]
那么能不能使用delete呢?delete是可以删除数组元素的,但它并不能使数组长度减1:
var a = [2,3,4];
delete a[a.length - 1];
console.log(a,a.length);
[2, 3, undefined] 3
可以看到,被删除元素不存在,不占用内存空间,它的值被设为undefined,但,长度仍旧不变。delete a[a.length - 1];
console.log(a,a.length);
[2, 3, undefined] 3
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。a[a.length - 1] = undefined;
console.log(a,a.length);
[2, 3, undefined] 3
如果有更好的方法可以探讨。
相关文章推荐
- 一道常被人轻视的web前端常见面试题(JS)
- 有一种情怀只属于程序员
- 关于App程序员泡沫
- 程序员新人,如何在复杂代码中找 bug?
- 你是个成熟的职场人么?
- bigdata hadoop 面试问题一
- To Java程序员:切勿用普通for循环遍历LinkedList
- Atitit. 如何判断软件工程师 能力模型 程序员能力模型 项目经理能力模型
- Atitit. 如何判断软件工程师 能力模型 程序员能力模型 项目经理能力模型
- Atitit. 如何判断软件工程师 能力模型 程序员能力模型 项目经理能力模型
- 面试笔试杂项积累-leetcode 306-310
- 面试笔试杂项积累-leetcode 301-305
- iOS面试题四
- web前端职业规划(转)
- iOS面试题二
- iOS面试题一
- 一道常被人轻视的前端JS面试题
- java工程师 一道面向对象面试题
- android面试2
- 【剑指Offer学习】【面试题17 ::合并两个排序的链表】