我正在FreeCodeCamp上提问。我需要在数组末尾添加一个数字,然后删除数组的第一个元素。名为nextInLine的函数应返回从中删除的元素。
我不是一个新手,但是我也不擅长JS。但是,我是算法的新手。我看过YouTube视频,以获取有关Queue的帮助。我对这个概念的理解如下:
//array as queue (FIFO)
const arr = [];
arr.push(5); // [5]
arr.push(7); // [5,7]
arr.push(9); // [5,7,9]
console.log(arr.shift()); // [7,9]
console.log(arr.shift()); // [9]
console.log(arr.shift()); // []
但是,当试图在我的代码中实现这个想法时,我似乎并没有完全理解所提出的问题以使其运行。我要修改函数nextInLine,并说// Display Code的注释,我也要更改该行。
function nextInLine(arr, item) {
// Your code here
arr.push(arr[0]);
arr.shift();
return console.log(arr, item); // Change this line
}
// Test Setup
var testArr = [1,2,3,4,5];
// Display Code
console.log("Before: " + JSON.stringify(testArr));
console.log(nextInLine(testArr)); // Modify this line to test
console.log("After: " + JSON.stringify(testArr));
运行代码时,这就是给我显示的内容。
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
我的函数正在输出/ * 2,3,4,5,1 * /,但似乎不正确。也许我无法将其放入数组中?我的开头有第一个数字(1),但是我是否无法将答案简单地放入数组中?还是我甚至没有提供正确的数字?
答案 0 :(得分:1)
您应该将item
推入阵列。您只需将数组的第一个元素移到末尾,而无需添加新元素。
然后console.log()
打印其参数,但不返回它们。因此,您的函数只是返回undefined
。
function nextInLine(arr, item) {
arr.push(item); // add new item to end
return arr.length > 1 ? arr.shift() : null; // remove first item and return it
}
如果return
语句中的条件语句是数组中唯一的元素(即数组最初为空),则它可以阻止它移出新元素。
答案 1 :(得分:1)
您可以先进行shift
,然后再进行push
。
function nextInLine(arr, item) {
var removedElement = arr.shift();
arr.push(item);
return removedElement;
}
答案 2 :(得分:0)
您可以使用Array.prototype.splice
从数组中删除第一个元素。
function nextInLine(arr, item) {
var firstElement = arr[0];
arr.splice(0, 1);
arr.push(item);
return firstElement;
}
var arr = [];
console.log('nextInLine(arr, 5) should return undefined and arr should be [5]:');
console.log('return value:', nextInLine(arr, 5));
console.log('array:', arr);
console.log('--------------------------------------')
console.log('nextInLine(arr, 1) should return 5 and arr should be [1]:');
console.log('return value:', nextInLine(arr, 1));
console.log('array:', arr);
console.log('--------------------------------------')
arr = [5,6,7,8,9];
console.log('nextInLine(arr, 10) should return 5 and arr should be [6, 7, 8, 9, 10]:');
console.log('return value:', nextInLine(arr, 10));
console.log('array:', arr);
console.log('--------------------------------------')
答案 3 :(得分:0)
您也可以尝试
function nextInLine(arr, item) {
arr.push(item);
return arr.shift();
}
var arr = [1,5,6]
console.log("removed element is : ", nextInLine(arr,10))
console.log("array is : ", arr)
答案 4 :(得分:0)
更新:在所有人的帮助下,我不仅能够解决问题,而且理解为什么解决方案是什么!我只需要切换以下代码行即可。显然,他们希望您先推动该项目,然后在阵列上移动。谁会知道大声笑。感谢大家!我不知道如何关闭论坛帖子,所以我将其保留。编码愉快!
答案 5 :(得分:0)