【问题标题】:JavaScript: What is the logic behind the 'shift' method?JavaScript:“shift”方法背后的逻辑是什么?
【发布时间】:2013-09-05 06:34:12
【问题描述】:

基本上,如何在不使用 shift() 或 splice() 方法(或任何其他方法)的情况下返回并删除数组的第一个元素?

提前致谢!

【问题讨论】:

    标签: javascript arrays shift


    【解决方案1】:

    'shift'方法背后的逻辑是什么?

    完整描述in the specification

    基本上,如何在不使用 shift() 或 splice() 方法(或任何其他方法)的情况下返回和删除数组的第一个元素?

    我看不出这种限制有什么好的理由,但是您可以使用循环手动为每个条目分配其上方条目的值(从末尾开始),直到您要更改的索引,然后将数组的length 设置为减一。有点像这样(我确信这不是 shift 所做的完整实现):

    Live example | Live source

    var n;
    for (n = theArray.length - 2; n >= removeAt; --n) {
        theArray[n] = theArray[n+1];
    }
    --theArray.length;
    

    更改数组的length 属性将删除不再在长度范围内的所有元素。

    你也可以在不改变数组长度的情况下删除一个元素,使用delete

    delete theArray[removeAt];
    

    数组的长度将保持不变,但在该位置将不再(根本)有条目。它变成 sparse (如果还没有的话)。这是因为delete 语句从对象中删除属性,而untyped JavaScript arrays are really just objects

    【讨论】:

    • 您也可以手动将每个元素向左移动一个位置。
    【解决方案2】:

    我认为这就是您要寻找的。它设置第一个字母,然后添加字符串的其余部分,用空字符串替换 finalString 变量中的第一个字母,然后返回 firstLetter 变量中保存的第一个字母。

    function remove(str){
      let firstLetter = '';
      let finalString = '';
      for(let i = 0; i < str.length; i++){
        if(i === 0){
          firstLetter = str[i];
        }
        finalString += str[i];
        if(i === 0){
          finalString = '';
        }
      }
      return firstLetter;
    }
    
    remove('hello');
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-25
      • 1970-01-01
      • 1970-01-01
      • 2014-05-06
      • 2017-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多