Javascript 如何仅使用一个数组而不是两个数组来反转数组?
一般来说,我对JavaScript和编程相当陌生。 我正在试验一些代码,用push和Pop反转数组。我知道我可以使用Array.prototype.reverse(),但我想尝试一下 以下是我的问题Javascript 如何仅使用一个数组而不是两个数组来反转数组?,javascript,arrays,stack,reverse,Javascript,Arrays,Stack,Reverse,一般来说,我对JavaScript和编程相当陌生。 我正在试验一些代码,用push和Pop反转数组。我知道我可以使用Array.prototype.reverse(),但我想尝试一下 以下是我的问题 1) 为什么在最后一行代码中没有定义?自从我回来 阵列 2) 为什么ReverseStack(stack,reversed.push(stack.pop())) 不是函数错误吗 3) 我怎样才能得到同样的结果,但没有 使用第二个数组?仅使用推送和弹出 const stack=[]; 常量反转=
- 1) 为什么在最后一行代码中没有定义?自从我回来 阵列李>
- 2) 为什么
不是函数错误吗李>ReverseStack(stack,reversed.push(stack.pop()))
- 3) 我怎样才能得到同样的结果,但没有 使用第二个数组?仅使用推送和弹出
const stack=[];
常量反转=[];
堆叠。推送(“a”);
堆叠。推送(“b”);
堆栈推送(“c”);
堆叠。推送(“d”);
堆叠。推送(“e”);
堆叠。推送(“f”);
反向堆栈=(堆栈,反向)=>{
for(设i=0;i,因为返回语句在if
块内,而不是在if else
块外。因此,最后的函数ReverseStack
返回一个隐式未定义的值
我认为您不需要记录/返回函数ReverseStack
的结果,因为您正在修改内存中的数组reversed
const stack=[];
常量反转=[];
堆叠。推送(“a”);
堆叠。推送(“b”);
堆栈推送(“c”);
堆叠。推送(“d”);
堆叠。推送(“e”);
堆叠。推送(“f”);
让反向堆栈=(堆栈,反向)=>{
for(设i=0;i
1) 为什么在最后一行代码中没有定义?因为我返回了数组
您的函数是递归的。虽然您在最终条件下返回了reversed
,但在输入else
语句时,您没有返回任何内容。您需要在else
中返回递归调用,以使返回值渗透回ReverseStack
的外部调用方:
const stack=[];
常量反转=[];
堆叠。推送(“a”);
堆叠。推送(“b”);
堆栈推送(“c”);
堆叠。推送(“d”);
堆叠。推送(“e”);
堆叠。推送(“f”);
反向堆栈=(堆栈,反向)=>{
对于(设i=0;i您可以使用以下内容:
想法:
- 删除第一项并保存它
- 对其余项目重复此过程,直到长度为1
- 在返回的数组中推送存储值
注:
Array.pop
不同于Stack.pop
Array.pop
删除最后一个元素,而Stack.pop
首先删除。您可以使用Array.shift
进行此操作
以下是一个示例:
const stack=[];
堆叠。推送(“a”);
堆叠。推送(“b”);
堆栈推送(“c”);
堆叠。推送(“d”);
堆叠。推送(“e”);
堆叠。推送(“f”);
反向堆栈=(堆栈)=>{
如果(堆栈长度>1){
const head=stack.shift();
const reverse=ReverseStack(堆栈);
倒推(头)
反向返回;
}
返回栈;
};
console.log(ReverseStack(stack.slice()))
FYI使用push和pop反转数组这会创建一组中间数组。但我不确定是否有一个通用的解决方案,除非至少创建一个中间数组或使用除push
/pop
@CertainPerformance是的,它会创建中间数组,但我面临很多问题由于参考,因此更倾向于使用这种方法。