首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >复制javascript/p5js中的数组,将所有值转换为0?

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

Stack Overflow用户
提问于 2017-05-12 01:39:18
回答 2查看 505关注 0票数 0

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

代码语言:javascript
复制
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]) 
 }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-05-12 05:21:49

都是我的错。问题是用unshift代替pop。它得到的第一个数组充满了0。在这里你可以看到我想做什么:https://www.pushpopchallenge.com/submissions/22

票数 0
EN

Stack Overflow用户

发布于 2017-05-12 02:05:51

你想要使用切片()

而不是拼接()

所以你在做什么

代码语言:javascript
复制
spectrums.push(s.splice(0))

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

你想做的是

代码语言:javascript
复制
spectrums.push(s.slice(0))

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43928013

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档