スコアに応じて、一定の金額を人々の配列に分配する必要があります。ルールは、彼らの要求は彼らの立場に応じて、残っているもので満たされるということです. ローダッシュ ( JSBin ) を使用する JavaScript の場合:
var amount = 1000,
people = [
{ name : 'Joe', score: 40, demand: 400},
{ name : 'Sue', score: 30, demand: 350},
{ name : 'Kim', score: 25, demand: 300},
{ name : 'Ron', score: 20, demand: 250}
];
function distribute(people, amount){
return _.map(_.sortBy(people,'need'),function(person){
var ration = Math.min(person.demand,amount);
amount -= ration; // This is the state (mutation) that I want to avoid
return _.assign(person,{ ration: ration})
});
}
console.log(distribute(people, amount));
結果:
[{ demand: 400, name: "Joe", ration: 400, score: 40},
{ demand: 350, name: "Sue", ration: 350, score: 30},
{ demand: 300, name: "Kim", ration: 250, score: 25},
{ demand: 250, name: "Ron", ration: 0, score: 20}]
解決策は順序に依存するため、このコードを純粋に機能するように変更することは可能ですか?