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

时间:2013-09-05 06:34:13

标签: javascript arrays shift

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

提前感谢!

2 个答案:

答案 0 :(得分:6)

  

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

完整地描述了in the specification

  

基本上,如何在不使用shift()OR 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];

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

答案 1 :(得分:0)

我认为这就是你要找的东西。它设置第一个字母,然后添加字符串的其余部分,用空字符串替换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');