使用 lodash 动态计算嵌套集合的平均值

2024-02-20

我有一个 JSON 对象数组(集合),例如:

[{
  "x": {
        "x1": 1
  },
  "y": {
    "yt": 0,
    "zt": 4,
    "qa": 3,
    "ft": 0,
    ...
  }
},
{
  "x": {
        "x1": 5
  },
  "y": {
    "yt": 10,
    "zt": 2,
    "qa": 0,
    "ft": 0,
    ...
  }
}]

我想计算每个字段的平均值。结果结构应该相同。喜欢:

    {
      "x": {
            "x1": 3
      },
      "y": {
        "yt": 5,
        "zt": 3,
        "qa": 1.5,
        "ft": 0,
        ...
      }
    }

Thanks


您可以使用扩展语法和 lodash 来合并对象_.mergeWith()。 合并时,如果第二个参数 (b) 是数字,则将其除以原始数组中的项目数,以获得其各自对总平均值的贡献。如果第一个参数 (a) 是数字,则只需将其相加而不进行除法(以避免将总和多次相除),如果未定义则添加 0。

我添加了 2 个对象数组和 3 个对象数组的示例。

const getAvg = (data) => _.mergeWith({}, ...data, (a, b) => {
  if(_.isNumber(b)) {
    return ((b || 0) / data.length) + (_.isNumber(a) ? (a || 0) : 0);
  }
});

const data1 = [
{"x":{"x1":1},"y":{"yt":0,"zt":4,"qa":3,"ft":0}},
{"x":{"x1":5},"y":{"yt":10,"zt":2,"qa":0,"ft":0}}
];

const data2 = [
{"x":{"x1":1},"y":{"yt":0,"zt":4,"qa":3,"ft":0}},
{"x":{"x1":5},"y":{"yt":10,"zt":2,"qa":0,"ft":0}},
{"x":{"x1":3},"y":{"yt":2,"zt":6,"qa":3,"ft":0}}
];

const result1 = getAvg(data1);

console.log('2 objects in the array: ', result1);

const result2 = getAvg(data2);

console.log('3 objects in the array: ', result2);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 lodash 动态计算嵌套集合的平均值 的相关文章