如何从具有字符串值的对象数组中获取总数?

如何解决如何从具有字符串值的对象数组中获取总数?

输入:

[
  {
    15: "3.0",20: "6.0",34: "4.0,Dosis: "First",Sex: "Male"
  },{
    15: "3.0",27: "6.0",32: "4.0,Dosis: "Second",{
    15: "",23: "12.0",44: "7.0,Sex: "Female"
  },70: "6.0",54: "34.0,]

我正在尝试重新排列一些数据,因为我需要在 JavaScript 中制作饼图。

我做了一些事情,但经历了很多过程,也许有更好的方法来做到这一点

这是我的实际数据(类似):

我只需要每个剂量和性别的全部数据的总和。 我还需要将“字符串编号”更改为数字。

预期输出

[
  {
    totalFirstMale: 13
    Dosis: "First",{
    totalSecondMale: 13
    Dosis: "Second",{
    totalFirstFemale: 19
    Dosis: "First",{
    totalSecondFemale: 43
    Dosis: "Second",]

PD: 对象键值表示年龄,但我只需要每个性别的总数。

原始数组包含 4 个具有相同结构的关键性别(男性、女性、未知、双性)。

我尝试过这样的事情:

    const maleData= json.filter(el => el.Sex === 'Male')
    const femaleData= json.filter(el => el.Sex === 'Female')

    const dataMaleFirst = maleData[0]
    const dataMaleSecond = maleData[1]
    const dataFemaleFirst = femaleData[0]
    const dataFemaleSecond = femaleData[1]

    const objValueFirstMale = Object.values(dataMaleFirst).map(el => el * 1)
    const objValueSecondMale = Object.values(dataMaleSecond).map(el => el * 1)

    const objValueFirstFemale = Object.values(dataFemaleFirst).map(el => el * 1)
    const objValueSecondFemale = Object.values(dataFemaleSecond).map(el => el * 1)

    let totalFirstMale = 0
    let totalSecondMale = 0
    let totalFirstFemale = 0
    let totalSecondFemale = 0

    for (let i = 0; i < objValueFirstMale.length || i < objValueSegundasHombre.length; i++) {
        !isNaN(objValueFirstMale[i]) ? totalFirstMale += objValueFirstMale[i] : 0
        !isNaN(objValueSecondMale[i]) ? totalSecondMale += objValueSecondMale[i] : 0
    }

    for (let i = 0; i < objValueFirstFemale.length || i < objValueSecondFemale.length; i++) {
        !isNaN(objValueFirstFemale[i]) ? totalFirstFemale += objValueFirstFemale[i] : 0
        !isNaN(objValueSecondFemale[i]) ? totalSecondFemale += objValueSecondFemale[i] : 0
    }
    
    return {
        firstMaleDosis: totalFirstMale,secondMaleDosis: totalSecondMale,totalMaleDosis: totalFirstMale + totalSecondMale,firstFemaleDosis: totalFirstFemale,secondFemaleDosis: totalSecondFemale,totalFemaleDosis: totalFirstFemale + totalSecondFemale 
    }

它看起来很糟糕我知道哈哈哈,现在我必须添加未知数据和双性数据。因此,再次执行所有这些“逻辑”可能会出现问题 >_>。

非常感谢您的帮助!

解决方法

您没有提到您使用的是哪种语言。 此解决方案适用于 javascript。

 const data = [
  {
    15: "3.0",20: "6.0",34: "4.0",Dosis: "First",Sex: "Male"
  },{
    15: "3.0",27: "6.0",32: "4.0",Dosis: "Second",{
    15: "",23: "12.0",44: "7.0",Sex: "Female"
  },70: "6.0",54: "34.0",]
  const output = data.map(el => {
    const countedKey = Object.keys(el).filter(item => !['Dosis','Sex'].includes(item));
    let totalCount = 0;
    countedKey.forEach(cnt => {
      if(!isNaN(parseInt(el[cnt]))) totalCount += parseInt(el[cnt]);
    });
    return { [`total${el.Dosis}${el.Sex}`]: totalCount,Dosis: el.Dosis,Sex: 
   el.Sex }
  });

console.log(output);
,

可以试试这个:

const data = [
  {
    15: "3.0",];
let output = [];
data.forEach(e => {

  const tempElem = {...e};
  delete tempElem['Dosis'];
  delete tempElem['Sex'];
  output.push({
    Dosis: e['Dosis'],Sex: e['Sex'],[`total${e.Dosis}${e.Sex}`]: Object.values(tempElem).filter(e => e !== '').reduce((a,b) => parseFloat(a) + parseFloat(b),0)
  });
});
console.log(output);

,

最后我做到了:

let output = data.map(({ Dosis,Sex,...restOfData }) => {
    const countedKey = Object.keys(restOfData)
    
    let totalCount = 0

    countedKey.forEach(el => {
        totalCount += +restOfData[el]
    })

    return {
        Dosis,[`total${Dosis}${Sex}`]: totalCount
    }
})

谢谢大家解开我的疑惑!!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?