将数组大小调整为指定长度并均匀分配索引值

时间:2016-04-13 04:05:09

标签: javascript

我在数学上非常糟糕,所以请原谅我,如果这是非常明显的,我确实做了研究,找不到符合我需要的东西。

我正在尝试让我的音频分析仪在宽度上做出响应。事实证明这很困难,因为frequency array具有固定的大小。

通过计算每个条的宽度,以及画布的宽度,我可以很容易地找出它内部可以容纳多少条。

因此,假设画布宽度为20像素,每个条形宽度为4像素(包括间距)。这意味着5个条可以放在画布内。因此,使用此信息,我们可以创建一个函数,将频率数组长度调整为5,并将频率均匀分配到这5个索引中。

这样就不会遗漏任何频率范围,分析仪可以调整到任何宽度,并且仍可填充空间。

function resize(array, integer) {
    ...
    return result;
}

array = [1, 2, 3, 4, 5... 100] // Array that goes from 1 to 100 (100 indexes)

resize(array, 10) // [1, 10, 20, 30, 40, 50, 60, 70, 80, 90]

这是画布上显示的原始数组(虚线条是画布外的那些)

enter image description here

现在我想调整数组的大小,使条形像这样适合画布(本例中为20条)

enter image description here

我真的希望我在这里解释得很好,这很难解释

1 个答案:

答案 0 :(得分:0)

此解决方案有效。现在。返回原始数组的第n个值factor

function arrayResize(array, integer) {
    var factor =  array.length / integer;

    return Array.apply(null, { length: integer }).map(function (_, i) {
        return array[Math.floor(i * factor)];
    });
}

var array = Array.apply(null, { length: 100 }).map(function (_, i) { return Math.floor(i / 10); });

document.write('<pre>' + JSON.stringify(array, 0, 4) + '</pre>');
document.write('<pre>' + JSON.stringify(arrayResize(array, 5), 0, 4) + '</pre>');
document.write('<pre>' + JSON.stringify(arrayResize(array, 10), 0, 4) + '</pre>');
document.write('<pre>' + JSON.stringify(arrayResize(array, 20), 0, 4) + '</pre>');