Javascript 如何仅使用一个数组而不是两个数组来反转数组?

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=[]; 常量反转=

一般来说,我对JavaScript和编程相当陌生。 我正在试验一些代码,用push和Pop反转数组。我知道我可以使用Array.prototype.reverse(),但我想尝试一下

以下是我的问题

  • 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是的,它会创建中间数组,但我面临很多问题由于参考,因此更倾向于使用这种方法。