Javascript 如何规范加权列表?

Javascript 如何规范加权列表?,javascript,weighted-average,Javascript,Weighted Average,我想给元素列表加权,然后从列表中选择随机元素。我有以下javascript,它们可以做到这一点: var generateWeighedList = function(list, weight) { var weighed_list = []; // Loop over weights for (var i = 0; i < weight.length; i++) { var multiples = weight[i] * 100;

我想给元素列表加权,然后从列表中选择随机元素。我有以下javascript,它们可以做到这一点:

var generateWeighedList = function(list, weight) {
    var weighed_list = [];

    // Loop over weights
    for (var i = 0; i < weight.length; i++) {
        var multiples = weight[i] * 100;

        // Loop over the list of items
        for (var j = 0; j < multiples; j++) {
            weighed_list.push(list[i]);
        }
    }

    return weighed_list;
};

var list = ['javascript', 'php', 'ruby', 'python'];
var weight = [0.5, 0.2, 0.2, 0.1];
var weighed_list = generateWeighedList(list, weight);

console.log(weighed_list.length);

如何定制算法,使最后的权重列表的总和为100,并且每个元素的比例都正确到100%

称重列表中
是结果
var list = ['javascript', 'php', 'ruby', 'python'];
var weight = [10, 50, 70, 90];
// build new array with length of weight
var weighed_list = Array.apply(null, { length: weight.length });
// get the sum of all weights
var sum = weight.reduce(function (a, b) { return a + b; }, 0);
// final take the ratio of every weight
weight.forEach(function (a, i) { weighed_list[i] = 100 * a / sum; });
var list = ['javascript', 'php', 'ruby', 'python'];
var weight = [10, 50, 70, 90];
// build new array with length of weight
var weighed_list = Array.apply(null, { length: weight.length });
// get the sum of all weights
var sum = weight.reduce(function (a, b) { return a + b; }, 0);
// final take the ratio of every weight
weight.forEach(function (a, i) { weighed_list[i] = 100 * a / sum; });