ZetCode

JavaScript shift 方法

最后修改于 2025 年 4 月 4 日

在本文中,我们将展示如何在 JavaScript 中使用 shift 方法从数组中移除元素。

数组的 shift 操作

shift 方法从数组中移除第一个元素并返回该被移除的元素。此方法会改变数组的长度。与某些其他数组方法不同,shift 直接修改原始数组。

当您需要以类似队列的方式处理元素,从数组的前面移除项目时,此方法很有用。 shift 操作的时间复杂度为 O(n),因为它需要重新索引所有剩余的元素。

如果数组为空,shift 返回 undefined,并且数组保持不变。 该方法通常与 push 配对,以在 JavaScript 中实现队列数据结构。

基本的 shift 示例

以下示例演示了 shift 方法的基本用法。

main.js
const fruits = ['apple', 'banana', 'cherry'];
const firstFruit = fruits.shift();

console.log(firstFruit);  // Removed element
console.log(fruits);      // Modified array

我们创建一个水果数组并移除它的第一个元素。 shift 方法返回被移除的元素 ('apple') 并修改原始数组。 数组长度减一。

$ node main.js
apple
[ 'banana', 'cherry' ]

从空数组中 shift

在空数组上调用 shift 时的行为。

main.js
const emptyArray = [];
const result = emptyArray.shift();

console.log(result);       // undefined
console.log(emptyArray);   // Still empty

当在空数组上调用 shift 时,它返回 undefined,而不会修改数组。 在处理可能为空的数组时,这种行为在代码中很重要,以避免意外错误。

$ node main.js
undefined
[]

在循环中使用 shift

shift 方法可以用于处理数组的所有元素。

main.js
const numbers = [1, 2, 3, 4, 5];

while (numbers.length > 0) {
    const num = numbers.shift();
    console.log(`Processing: ${num}`);
}

console.log(numbers);  // Empty array

我们使用 while 循环来处理并从数组中移除所有元素。 每次迭代都会移除并处理第一个元素,直到数组为空。 这种方法完全消耗了数组。

$ node main.js
Processing: 1
Processing: 2
Processing: 3
Processing: 4
Processing: 5
[]

shift 与不同的数据类型

shift 方法适用于包含任何数据类型的数组。

main.js
const mixedArray = [true, {name: 'John'}, 42, 'hello', null];
const firstElement = mixedArray.shift();

console.log(firstElement);
console.log(mixedArray);

我们演示了 shift 适用于包含布尔值、对象、数字、字符串和 null 值的数组。 无论其类型如何,该方法都会移除并返回第一个元素,保留对对象的引用。

$ node main.js
true
[ { name: 'John' }, 42, 'hello', null ]

使用 shift 和 push 实现队列

shiftpush 方法可以实现一个队列。

main.js
const queue = [];

// Enqueue items
queue.push('first');
queue.push('second');
queue.push('third');

// Dequeue items
while (queue.length > 0) {
    const item = queue.shift();
    console.log(`Processing: ${item}`);
}

console.log(queue);  // Empty queue

我们使用 push 将项目添加到末尾,并使用 shift 从开头移除项目来实现一个简单的队列。 这遵循队列数据结构的先进先出 (FIFO) 原则。

$ node main.js
Processing: first
Processing: second
Processing: third
[]

来源

数组 shift - 语言参考

在本文中,我们演示了如何使用 shift() 方法从 JavaScript 中的数组中移除元素。

作者

我的名字是 Jan Bodnar,我是一位充满激情的程序员,拥有丰富的编程经验。 自 2007 年以来,我一直在撰写编程文章。 迄今为止,我撰写了 1,400 多篇文章和 8 本电子书。 我拥有超过十年的编程教学经验。

列出 所有 JS 数组函数。