有一个数组
let newArrAdd = [
{ a: 3.6, num: 3 },
{ a: 4.5, num: 1 },
];
已知一个总数sum = 300,也就是说 300 >=newArrAdd[0]anewArrAdd[0]bnum + newArrAdd[1]anewArrAdd[1]num
那么如何用点击事件将这个300随机分配到每个对象的num中,让他们的总数最接近于300,
有一个数组
let newArrAdd = [
{ a: 3.6, num: 3 },
{ a: 4.5, num: 1 },
];
已知一个总数sum = 300,也就是说 300 >=newArrAdd[0]anewArrAdd[0]bnum + newArrAdd[1]anewArrAdd[1]num
那么如何用点击事件将这个300随机分配到每个对象的num中,让他们的总数最接近于300,
让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言问题分析: 这个问题是要求将300随机分配到数组中的每个对象的num中,使得它们的总和最接近于300。因为是随机分配,所以不能保证每次运行的结果都一样,但应尽可能保证随机性和准确性。 解决方案: 首先,可以先计算出数组中原先每个对象的num的总和sum1,然后用300减去sum1得到剩余的数sum2。接下来,可以用以下步骤来随机分配这个数:
$('#button').click(function() {
let newArrAdd = [
{a: 3.6, num: 3},
{a: 4.5, num: 1},
];
let sum1 = newArrAdd.reduce((acc, obj) => acc + obj.num, 0);
let sum2 = 300 - sum1;
let weights = newArrAdd.map(obj => Math.floor(obj.a / newArrAdd.reduce((acc, obj1) => acc + obj1.a, 0) * 10000));
let weightSum = weights.reduce((acc, w) => acc + w, 0);
let avg = sum2 / weightSum;
let nums2 = weights.map(w => Math.floor(w * avg));
for (let i = 0; i < newArrAdd.length; i++) {
newArrAdd[i].num += nums2[i];
}
});