在javascript / p5js中复制数组将所有值转换为0?

时间:2017-05-12 01:39:19

标签: javascript arrays processing fft p5.js

我有这个简单的代码,我试图保留一个数组数组,这只是FFT音频数据。我认为这是一个javascript问题,但我不确定是什么问题。 fft.analyze()只返回一个数字数组。在我将阵列推入阵列频谱后,频谱内的所有值都是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]) 
 }
}

2 个答案:

答案 0 :(得分:0)

您想使用slice()

而不是 splice()

所以你在做什么

spectrums.push(s.splice(0))

s从一开始就被清空( 0 索引)

你想做的是

spectrums.push(s.slice(0))

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

另一方面,

splice()只需通过插入或删除元素来修改原始数组。

答案 1 :(得分:0)

这是我的错。问题是使用unshift而不是pop。 它得到的第一个数组是0。 在这里,您可以看到我想要制作的内容:https://www.pushpopchallenge.com/submissions/22