首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >javascript -计算数组中每10个对象的成功率

javascript -计算数组中每10个对象的成功率
EN

Stack Overflow用户
提问于 2021-04-28 04:53:35
回答 2查看 82关注 0票数 0

我有下面的数组,它可以包含多达30个对象,每个用户的动态对象。

代码语言:javascript
运行
复制
const array = [
{name: x, succeeded: true},
{name: y, succeeded: false},
{name: z, succeeded: true},
]

我需要做的是做一个函数,它将检查每10个对象的成功率,并添加一个名为"successRate“的键,其中最后10个对象的成功率取决于成功的次数是否为真。如果剩下的对象少于10个,它将计算剩余对象的成功率(例如,如果数组中有27个对象,它将检查前10个对象的成功率,然后检查其他10个对象的成功率,然后检查7个对象的成功率)。

示例数组的输出应为:

代码语言:javascript
运行
复制
const array = [
{name: x, succeeded: true, successRate: 66.66%},
{name: y, succeeded: false, successRate: 66.66%},
{name: z, succeeded: true, successRate: 66.66%},
]

但是,如果数组的长度为13,它将首先检查前10个对象,并为它们提供相同的成功率,然后检查其他3个对象,并为它们提供相同的成功率。例如:

代码语言:javascript
运行
复制
const array = [
{name: 1, succeeded: true, successRate: 80%},
{name: 2, succeeded: true, successRate: 80%},
{name: 3, succeeded: true, successRate: 80%},
{name: 4, succeeded: true, successRate: 80%},
{name: 5, succeeded: false, successRate: 80%},
{name: 6, succeeded: true, successRate: 80%},
{name: 7, succeeded: true, successRate: 80%},
{name: 8, succeeded: false, successRate: 80%},
{name: 9, succeeded: true, successRate: 80%},
{name: 10, succeeded: true, successRate: 80%},
{name: 11, succeeded: false, successRate: 66.66%},
{name: 12, succeeded: true, successRate: 66.66%},
{name: 13, succeeded: true, successRate: 66.66%},
]
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-04-28 05:35:47

这是一个使用递归来分块数组的解决方案……

代码语言:javascript
运行
复制
const
  array = [{ name: 1 }, { name: 2, succeeded: true }, { name: 3, succeeded: true }, { name: 4, succeeded: true }, { name: 5, succeeded: false }, { name: 6, succeeded: true }, { name: 7, succeeded: true }, { name: 8, succeeded: false }, { name: 9, succeeded: true }, { name: 10, succeeded: true }, { name: 11, succeeded: false }, { name: 12, succeeded: true }, { name: 13, succeeded: true },],

  calculateSucessRate = (arr) => {
    const { sum, length } = arr.reduce((a, { succeeded }) => {
      if (succeeded !== undefined) {
        a.length += 1;
        a.sum += succeeded;
      }
      return a;
    }, { sum: 0, length: 0 });

    return sum / length;
  },

  successRateByChunk = (arr, chunkSize) => {
    if (!arr.length) { return []; }

    const chunk = arr.slice(0, chunkSize);
    const successRate = `${calculateSucessRate(chunk) * 100}%`;

    return [
      ...chunk.map(o => ({ ...o, successRate })),
      ...successRateByChunk(arr.slice(chunkSize), chunkSize)
    ];
  };

console.log(successRateByChunk(array, 10));
代码语言:javascript
运行
复制
.as-console-wrapper { max-height: 100% !important; top: 0; }

票数 2
EN

Stack Overflow用户

发布于 2021-04-28 05:28:12

您可以执行以下操作:

代码语言:javascript
运行
复制
const array = [
  {name: 1, succeeded: true,},
  {name: 2, succeeded: true},
  {name: 3, succeeded: true},
  {name: 4, succeeded: true},
  {name: 5, succeeded: false},
  {name: 6, succeeded: true},
  {name: 7, succeeded: true},
  {name: 8, succeeded: false},
  {name: 9, succeeded: true,},
  {name: 10, succeeded: true},
  {name: 11, succeeded: false},
  {name: 12, succeeded: true},
  {name: 13, succeeded: true},
]

const arrays = [];
const size = 10;
// first split input into chunks of 10 or less
for (let i = 0; i < array.length; i += size) {
   arrays.push(array.slice(i, i + size));
}

const result = arrays.forEach(chunk => { // do following for each chunk

   //find number of succeeded items
   let succeeded = chunk.filter(item => item.succeeded).length;

   // find success rate based on number of items in chunk
   let rate = `${(succeeded/chunk.length) * 100}%`;

   // add current success rate to every item in chunk
   chunk.forEach(item => item.successRate = rate);
});

console.log(arrays.flat());

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67290541

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档