不使用 shift() 方法从数组中删除第一个元素。

3
在我的软件工程师训练营预备课程中,我被要求编写一个JavaScript函数,该函数删除数组中的第一个值并返回被删除元素的值,但不能使用内置的shift方法。如果数组为空,它应该返回undefined。我的代码如下,但没有通过所有测试。
function shift(arr) {
    let arr1 = [];
    arr1 = arr.splice(0, 1);
    if (arr.length > 0) {
        return arr1;
    }
    return "undefined";
}

1
你确定如果数组为空,应该返回一个字符串而不是 undefined 吗? - UnholySheep
1
另外,arr1 是一个数组,但是您的要求似乎是返回单个元素,因此应该是 arr1[0] - UnholySheep
此外,您应该在尝试将值从其中删除之前检查arr是否为空。 - Nick
3个回答

3
您可以使用解构赋值与展开运算符结合使用。

const arr = [1, 2, 3]

const [removed, ...newArr] = arr

console.log(removed)
console.log(newArr)


参考文献

解构赋值

展开语法(...)


1
这与splice的结果不同。我认为OP想要改变原始数组。 - Dieterg

0

我已经修改了你的代码。

  1. 如果数组中没有数据,则返回undefined。

  2. 如果有数据,则使用splice方法返回第一个值。

function shift(arr) {
    if(!arr.length){
      return undefined;
    }
    arr1 = arr.splice(0, 1);
   return arr1
   }

var arr = [12,14,156];
console.log(shift(arr));


0

听起来这是使用Array.splice方法的好例子。 你可以在这里阅读相关内容。

这应该是你正在寻找的解决方案。

function myShift(arr) {
    if (!arr || arr.length === 0) return undefined;
    return arr.splice(0, 1);
}

如果传递给该方法的数组是假值(null/undefined),或者它没有任何元素,则返回undefined。
splice方法将返回从数组中删除的元素。
由于您从第0个索引处删除了1个元素,因此它将返回该元素(并且还会改变原始数组)。

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