【问题标题】:JavaScript Array calculate average returns NaN [closed]JavaScript数组计算平均回报NaN [关闭]
【发布时间】:2020-12-12 02:33:50
【问题描述】:

我有一个这种格式的数组:

let array = [{length:0},{length:5},{length:5},{length:10},{length:5}]

let sum = array.filter(x=>x.length).reduce((a,b)=>a.length + b.length, 0)

let count = array.filter(x=>x.length).length

console.log(sum,count,sum/count)

我需要过滤 > 0 的值并根据这些值计算平均值,但对于 sum 总是得到 NaN,因此对于我需要的平均值。我是从这个answer here开始的。

感谢您的任何建议。

【问题讨论】:

标签: javascript arrays filter reduce


【解决方案1】:

您需要存储过滤后的项目并通过获取length 属性来获取总和。得到NaN的原因,你取一个数字,从a得到属性length,它并不存在。在使用 undefined 作为相加值时,您会得到 NaN 作为总和。

稍后除以过滤后数组的长度。

let array = [{ length: 0 }, { length: 5 }, { length: 5 }, { length: 10 }, { length: 5 }],
    items = array.filter(x => x.length),
    sum = items.reduce((sum, { length }) => sum + length, 0),
    length = items.length,
    average = sum / length;

console.log(sum, length, average);

使用sumcount 的对象和单个循环的方法。

let array = [{ length: 0 }, { length: 5 }, { length: 5 }, { length: 10 }, { length: 5 }],
    { sum, count } = array.reduce(
        (o, { length }) => (o.sum += length, o.count += !!length, o),
        { sum: 0, count: 0 }
    ),
    average = sum / count;

console.log(sum, count, average);

【讨论】:

    【解决方案2】:

    你的问题是你如何使用reduce函数。

    let array = [
      { length: 0 },
      { length: 5 },
      { length: 5 },
      { length: 10 },
      { length: 5 }
    ];
    
    let sum = array.filter((x) => x.length).reduce((a, b) => a + b.length, 0);
    let count = array.filter((x) => x.length).length;
    console.log(sum, count, sum / count);

    【讨论】:

      【解决方案3】:

      试试这个:

      const array = [{ length: 0 }, { length: 5 }, { length: 5 }, { length: 10 }, { length: 5 }];
      let count = 0;
      let sum = 0;
      for (const item of array) {
        if (item.length) {
          sum += item.length;
          count++;
        }
      }
      console.log(sum / count);

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-01-10
        • 1970-01-01
        • 2021-11-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多