复制 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
我有这个简单的代码,我试图保留一个数组数组,它只是 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