首页 > 解决方案 > Javascript 基本算法 - QUEUE

问题描述

在我学习 javascript 的过程中,有人问我以下问题:

在计算机科学中,队列是一种抽象的数据结构,其中项目按顺序排列。可以在队列后面添加新项目,从队列前面取出旧项目。

编写一个函数 nextInLine,它接受一个数组 (arr) 和一个数字 (item) 作为参数。

将数字添加到数组的末尾,然后删除数组的第一个元素。

然后 nextInLine 函数应该返回被移除的元素。

这是我应该运行的以下测试:

nextInLine([], 5) should return a number.   
nextInLine([], 1) should return 1    
nextInLine([2], 1) should return 2    
nextInLine([5,6,7,8,9], 1) should return 5   
After nextInLine(testArr, 10), testArr[4] should be 10

我基本上应该删除数组中的第一项并将该项添加到数组的末尾。我正在画一个空白,这是我到目前为止所拥有的:

function nextInLine(arr, item) {

  var temp = [];
  for(var i = 0; i < arr.length; i++){

      if(arr[i] == arr[0]){
          temp = arr[i];
          arr[i] = arr[i+1];
      }
  }

  return item;  
}

// Test Setup
var testArr = [1,2,3,4,5];

// Display Code
console.log("Before: " + JSON.stringify(testArr));
console.log(nextInLine(testArr, 6)); 
console.log("After: " + JSON.stringify(testArr));

在这个例子中,我的输出如下:

Before: [1,2,3,4,5]
 6
After: [2,3,3,4,5]

我也试过这样:

function nextInLine(arr, item) {
  // Your code here
  arr.push();
  arr.pop(arr[0]);
  return item;  
}


var testArr = [1,2,3,4,5];


console.log("Before: " + JSON.stringify(testArr));
console.log(nextInLine(testArr, 6)); 
console.log("After: " + JSON.stringify(testArr));

得到这个:

Before: [1,2,3,4,5]
6
After: [1,2,3,4]

如果有人可以指导我,将不胜感激。

更新

如果没有内置方法,有没有办法做到这一点?

标签: javascriptarraysalgorithmsorting

解决方案


您可以将项目添加到末尾,然后返回第一个元素并将其删除。请注意,pop 从数组中删除最后一项,您要删除第一项的方法是 shift:

function nextInLine(arr, item) {
    arr.push(item);
    return arr.shift();
}

推荐阅读