在javascript中基于整数将数组拆分为偶数块

时间:2016-02-22 22:24:33

标签: javascript arrays

这可能是重复的,但我在这里找不到任何与我的问题相关的问题。

假设我有一个像这样的数组

var hundred = [1,2,3,4,5...100] 

这个数组有100个元素。从1到100。

基于整数,如何将此数组拆分为具有相同数量元素的另一个数组,除非它们像这样均匀分布?

var integer = 2;
var hundred = [50,50,50,50,50,50...100,100,100,100,100,100]

在这个例子中,数组有50个元素值为50,50个元素值为100,因为整数是2。

我对数学不好,所以这可能不正确,但我希望你明白我的意思。计算后,数组必须具有相同的索引数量。

编辑(由于我在制定问题方面非常糟糕,我将在这里使用我需要的代码):

所以我有一个frequencybin数组(来自AudioContext分析器):

var fbc_array = new Uint8Array(analyser.frequencyBinCount);
analyser.getByteFrequencyData(fbc_array);

此数组具有一定数量的元素(它们是播放音频的频率)。

现在我有一个频谱分析仪,它有一组"条和#34;所以,如果我只有3个条形图,那么如何分割fbc_array以使每个条形均匀分布在其中?例如,有3个小节,一个小节将有低音,两个小节将有中音,三个小节将有高音。

我使用for循环遍历每个栏:

for (i = 0; i < bars; i++) {
        bar_x = i * canspace;
        bar_width = 2;
        bar_height = -3 - (fbc_array[i] / 2);
        ctx.fillRect(bar_x, canvas.height, bar_width, bar_height);
    }

2 个答案:

答案 0 :(得分:1)

(在更新之前写的,所以在这里猜测)。

您正在寻找一种近似图表的方法,以便将其划分为一个频段,并且一个频段内的每个点都会被该频段的最大值替换:

enter image description here

&#13;
&#13;
Number.prototype.times = function(fn) {
  var a = [];
  for(var i = 0; i < this; i++)
    a.push(fn(i));
  return a;
}



function approximate(src, n) {

  var res = [], 
      size = Math.ceil(src.length / n), 
      i = 0;
  
  
  while(i < src.length) {
    var chunk = src.slice(i, i += size)
    var p = Math.max.apply(null, chunk);
    
    // this gives you an average instead of maximum
    // p = chunk.reduce((x, y) => x + y) / chunk.length;
    
    res = res.concat(size.times(i => p));
  }
  
  return res;

}



src = 20..times(i => 10 + Math.floor(Math.random() * 80));

res = approximate(src, 4);

document.write('<pre>'+JSON.stringify(src));
document.write('<pre>'+JSON.stringify(res));
&#13;
&#13;
&#13;

答案 1 :(得分:1)

这是我从这种疯狂中收集到的东西!对不起,您在传达问题时遇到了问题。这总是令人头痛!祝你好运。

//set integer to whatever you want
var integer = 3;
var randomNumber;
var output = new Array()

function getRandomIntInclusive(min, max) {
 randomNumber = Math.floor(Math.random() * (max - min + 1)) + min;
}

for(i = 0; i<integer;i++){
  getRandomIntInclusive(1,100);
  for(j = 1; j< (100/integer); j++){
    output.push(randomNumber);
  }
}

//note, you will not always get 100 array items
//you can check with console.log(output.length);
console.log(output);