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

4
基本上,您如何返回并删除数组的第一个元素而不使用shift()或splice()方法(或任何其他方法)?
提前感谢!
2个回答

7

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

它在规范中有详细说明。

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

我看不出这种限制有什么好处,但您可以使用循环手动将每个条目分配为它上面的值(从末尾开始),直到要更改的索引,然后将数组的length设置为小于一。大致类似于此(我确定这不是shift所做的完整实现):

实时示例 | 实时源代码

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

修改数组的length属性将会移除任何不再数组长度范围内的元素。
你也可以使用delete来删除一个元素而不改变数组的长度:
delete theArray[removeAt];

数组的长度不会改变,但在该位置上将不再有任何条目。它变得稀疏(如果之前不是)。这是因为delete语句从对象中删除属性,并且未经类型化的JavaScript数组实际上只是对象

2
你也可以手动将每个元素向左移动一个位置。 - Felix Kling

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');

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接