I came up with something pretty similar while generating items. However, the following code gets pretty hard to read with lots of items because the values don't line up. And while balancing, you will want to be able to read and modify it very easily:
>var list = ['javascript', 'php', 'ruby', 'python'];
var weight = [0.5, 0.2, 0.2, 0.1];
You could instead put each into an object: {
language: 'javascript',
weight: 0.5
}
(0,a,a+b,a+b+c)
random() gives values in [0,1], so divide your numbers by a + b + c.
Generating random structures is the tip of a very big iceberg.