zoukankan      html  css  js  c++  java
  • 前端面试题:写出删除非空数组最后一个元素并使数组长度减一的几种方法

    javascript绝对是计算机语言最复杂的语言之一,与最近上映的《美人女》一样细思极恐,简单、平静的表面下酿酝着巨大能量。

    这是一道js core的基础题,考察应聘者的掌握的基础知识。

    注意审题,你写出的方法不但需要删除最后一个元素,并且数组长度需要缩减。

    一般能想到的第一种方法是弹出数组最后的一个值:

    var a = [2,3,4];
    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方法:

    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。

    如果有更好的方法可以探讨。

  • 相关阅读:
    vue使用axios调用api接口
    vue引用echarts
    C# 倒计时,显示天,时,分,秒。时间可以是从数据库捞出来
    DataGridView 控件操作大全 (内容居中显示,右键绑定菜单)
    Oracle使用row_number()函数查询时增加序号列
    Oracle 相关操作SQL
    oracle rac切换到单实例DG后OGG的处理
    oracle dg库因为standby_file_management参数导致应用停止
    oracle rac与单实例DG切换
    oracle rac搭建单实例DG步骤(阅读全篇后再做)
  • 原文地址:https://www.cnblogs.com/sumsung753/p/5189800.html
Copyright © 2011-2022 走看看