复制 javascript/p5js 中的数组将所有值都变成 0?

copying arrays in javascript/p5js turning all values into 0s?

我有这个简单的代码,我试图保留一个数组数组,它​​只是 FFT 音频数据。我认为这是一个 javascript 问题,但我不确定哪里出了问题。 fft.analyze() 只是 returns 一个数字数组。在我将数组推入数组频谱后,频谱内的所有值都是 0,而不是实际值。使用 array.splice(0) 应该是深拷贝。谁能告诉我我在这里做错了什么?

var fft,mic;
function setup(){
  var myCanvas = createCanvas(800,800); 
  fft = new p5.FFT();
  ellipse(400,400,50,50)
  colorMode(HSB,100)
  spectrums=[]
  mic = new p5.AudioIn();
  mic.start();
  fft = new p5.FFT();
  fft.setInput(mic);
}

function draw() {
  background(255)
  s = fft.analyze(16)
 for(si=0;si<s.length;si++){
   fill(s[si]%100,100,100)
  rect(si*10,0,si*10,s[si]) 
 }
 spectrums.push(s.splice(0))
  if(spectrums.length > 5){
    spectrums.splice(-1,1)
  }
  console.log(spectrums[0][0]) //this prints 0 always
for(si=0;si<spectrums[0].length;si++){
   fill(spectrums[0][si]%100,100,100)
  rect(si*10,400,si*10,spectrums[0][si]) 
 }
}

您想使用 slice()

并没有 splice()

所以你在做什么

spectrums.push(s.splice(0))

s 从头开始​​清空 (0 索引)

你想做的是

spectrums.push(s.slice(0))

slice() 保持原始数组不变,只创建一个副本。

splice() 另一方面只是通过插入或删除元素来修改原始数组。

是我的错。问题是使用 unshift 而不是 pop。 它得到的第一个数组全是 0。 在这里你可以看到我想要做什么:https://www.pushpopchallenge.com/submissions/22