这可能是重复的,但我在这里找不到任何与我的问题相关的问题。
假设我有一个像这样的数组
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);
}
答案 0 :(得分:1)
(在更新之前写的,所以在这里猜测)。
您正在寻找一种近似图表的方法,以便将其划分为一个频段,并且一个频段内的每个点都会被该频段的最大值替换:
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;
答案 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);