使用数组中对象值的四舍五入百分比获得 100%

Get 100% with rounded percentages of objects values in an array

我有一个对象数组,对象的值是百分比。有没有办法将这些值四舍五入并在添加时仍然得到 100%?

const items = [
    {
        name: 'Something',
        value: 20.4
    },
    {
        name: 'something else',
        value: 36.6
    },
    {
        name: 'another thing',
        value: 21.5
    },
    {
        name: 'other item',
        value: 21.5
    }
];

和return类似这样的东西

const items = [
    {
        name: 'Something',
        value: 20
    },
    {
        name: 'something else',
        value: 37
    },
    {
        name: 'another thing',
        value: 21
    },
    {
        name: 'other item',
        value: 22
    }
];

实现此目的的一种方法是遍历数组,维护舍入值的滚动总和,然后将数组中的最后一个值设置为 100 - sum:

const items = [
  { name: 'Something', value: 20.4 },
  { name: 'something else', value: 36.6 },
  { name: 'another thing', value: 21.5 },
  { name: 'other item', value: 21.5 }
];

let sum = 0;
const rounded = items.map(({name, value}, i) => {
  if (i == items.length - 1) {
    return { name, value: 100 - sum };
  }
  value = Math.round(value);
  sum = sum + value;
  return { name, value };
});

console.log(rounded);