Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在javascript/p5js中复制数组,将所有值转换为0?_Javascript_Arrays_Processing_Fft_P5.js - Fatal编程技术网

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

在javascript/p5js中复制数组,将所有值转换为0?,javascript,arrays,processing,fft,p5.js,Javascript,Arrays,Processing,Fft,P5.js,我有这个简单的代码,我试图保留一个数组,这只是FFT音频数据。我认为这是一个javascript问题,但我不确定到底出了什么问题。analyze()只返回一个数字数组。我将数组推入数组频谱后,频谱中的所有值都是0,而不是实际值。使用array.splice(0)应该是深度副本。有人能告诉我我做错了什么吗 var fft,mic; function setup(){ var myCanvas = createCanvas(800,800); fft = new p5.FFT(); e

我有这个简单的代码,我试图保留一个数组,这只是FFT音频数据。我认为这是一个javascript问题,但我不确定到底出了什么问题。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]) 
 }
}
var-fft,mic;
函数设置(){
var myCanvas=createCanvas(800800);
fft=新的p5.fft();
椭圆(400400,50,50)
彩色模式(HSB,100)
光谱=[]
麦克风=新的p5.AudioIn();
mic.start();
fft=新的p5.fft();
fft.setInput(mic);
}
函数绘图(){
背景(255)
s=fft.分析(16)
对于(si=0;si 5){
光谱.拼接(-1,1)
}
console.log(spectrums[0][0])//这将始终打印0
对于要使用的(si=0;si)

而不是

那你在干什么

spectrums.push(s.splice(0))
s
从一开始就被清空(0索引)

你想做的是

spectrums.push(s.slice(0))
slice()
保持原始数组不变,只创建一个副本


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

这是我的错。问题是使用unshift而不是pop。 它得到的第一个数组中满是0。
在这里,您可以看到我想做的:

如果您想将数组的所有值都设置为零,您可以执行arr.map(c=>0)如果您发布的是一个而不是此代码,那么您的运气会更好,因为此代码依赖于硬件输入,因此运行起来非常困难。请尝试创建一个小示例程序,该程序仅使用硬编码数组来准确显示您正在尝试做的事情。
splice
!=
slice
此代码是可运行的,下面是它运行的完整链接:它应该具有这些图中有2个出现了,但只有1个出现了。我只是尝试了slice(),我得到了完全相同的问题。我以前尝试过许多不同的复制机制,如JSON.parse(JSON.stringify(myArray)),但都不起作用。我不知道该怎么做。我确信fft.analyze()是正确的返回一个普通数组:我确定这是一个javascript问题,但我不知道如何修复它。毫无意义…在
slice
之后和之前,您的
s
数组应该仍然充满数据。