【问题标题】:Obtaining totals from properties of parallel arrays in nested objects从嵌套对象中的并行数组的属性中获取总计
【发布时间】:2017-04-10 09:10:12
【问题描述】:

我正在尝试从存在于“并行”嵌套数组中的对象中的属性中获取总数。数据描述了练习集。

我想在“totalWeight”字段中填充每次锻炼的举重总和。数据结构如下。总数应该是“reps”值的“setNum”x “Weight”值的“setNum”,其中 setNums 存在于两个并行数组中。所以对于第一个练习(哑铃肩推),总重量应该是 560((8 次 x 28 重量)+(6x28)+(6x28))。测量类型通过“mu_id”属性来区分,“key”属性值是从该属性中获取的。

一个复杂的因素是,一些练习可能有左手和右手代表,因此有 3 个平行阵列,如单臂电缆前平举的第二个示例。在那里,totalWeight 应该是 265 ((8 lh reps + 8 rh reps )*6.25 weight)+((7+8)*6.25)+((10+9)*3.75))。

数据结构是由平面数据库文件中的 d3.js 嵌套例程创建的,但我还没有弄清楚如何将这些值作为嵌套的一部分(使用汇总)或其他方式获取。我可以访问 d3.js 但没有其他 js 库。

[
   {
      "exercise":"Dumbbell Shoulder press",
      "totalWeight":0,
      "values":[
         {
            "key":"1",
            "values":[
               {
                  "resultsId":10381,
                  "setNum":"8",
                  "desc":"times",
                  "unit":"Reps",
                  "mu_id":1
               },
               {
                  "resultsId":10382,
                  "setNum":"6",
                  "desc":"times",
                  "unit":"Reps",
                  "mu_id":1
               },
               {
                  "resultsId":10383,
                  "setNum":"6",
                  "desc":"times",
                  "unit":"Reps",
                  "mu_id":1
               }
            ]
         },
         {
            "key":"3",
            "values":[
               {
                  "resultsId":10381,
                  "setNum":"28",
                  "desc":"kilograms",
                  "unit":"Weight",
                  "mu_id":3
               },
               {
                  "resultsId":10382,
                  "setNum":"28",
                  "desc":"kilograms",
                  "unit":"Weight",
                  "mu_id":3
               },
               {
                  "resultsId":10383,
                  "setNum":"28",
                  "desc":"kilograms",
                  "unit":"Weight",
                  "mu_id":3
               }
            ]
         }
      ]  
   },
   {
      "exercise":"One Arm Cable Front Raise",
      "totalWeight":0,
      "values":[
         {
            "key":"3",
            "values":[
               {
                  "resultsId":10395,
                  "setNum":"6.25",
                  "desc":"kilograms",
                  "unit":"Weight",
                  "mu_id":3
               },
               {
                  "resultsId":10396,
                  "setNum":"6.25",
                  "desc":"kilograms",
                  "unit":"Weight",
                  "mu_id":3
               },
               {
                  "resultsId":10397,
                  "setNum":"3.75",
                  "desc":"kilograms",
                  "unit":"Weight",
                  "mu_id":3
               }
            ]
         },
         {
            "key":"7",
            "values":[
               {
                  "resultsId":10395,
                  "setNum":"8",
                  "desc":"times",
                  "unit":"Reps (left)",
                  "mu_id":7
               },
               {
                  "resultsId":10396,
                  "setNum":"7",
                  "desc":"times",
                  "unit":"Reps (left)",
                  "mu_id":7
               },
               {
                  "resultsId":10397,
                  "setNum":"10",
                  "desc":"times",
                  "unit":"Reps (left)",
                  "mu_id":7
               }
            ]
         },
         {
            "key":"8",
            "values":[
               {
                  "resultsId":10395,
                  "setNum":"8",
                  "desc":"times",
                  "unit":"Reps (right)",
                  "mu_id":8
               },
               {
                  "resultsId":10396,
                  "setNum":"8",
                  "desc":"times",
                  "unit":"Reps (right)",
                  "mu_id":8
               },
               {
                  "resultsId":10397,
                  "setNum":"9",
                  "desc":"times",
                  "unit":"Reps (right)",
                  "mu_id":8
               }
            ]
         }
      ]
   },
   {...}
]

【问题讨论】:

    标签: javascript arrays d3.js


    【解决方案1】:

    您可以在一个数组中收集想要的数据并减少内部数组,然后添加单个值。

    var data = [{ exercise: "Dumbbell Shoulder press", totalWeight: 0, values: [{ key: "1", values: [{ resultsId: 10381, setNum: "8", desc: "times", unit: "Reps", mu_id: 1 }, { resultsId: 10382, setNum: "6", desc: "times", unit: "Reps", mu_id: 1 }, { resultsId: 10383, setNum: "6", desc: "times", unit: "Reps", mu_id: 1 }] }, { key: "3", values: [{ resultsId: 10381, setNum: "28", desc: "kilograms", unit: "Weight", mu_id: 3 }, { resultsId: 10382, setNum: "28", desc: "kilograms", unit: "Weight", mu_id: 3 }, { resultsId: 10383, setNum: "28", desc: "kilograms", unit: "Weight", mu_id: 3 }] }] }, { exercise: "One Arm Cable Front Raise", totalWeight: 0, values: [{ key: "3", values: [{ resultsId: 10395, setNum: "6.25", desc: "kilograms", unit: "Weight", mu_id: 3 }, { resultsId: 10396, setNum: "6.25", desc: "kilograms", unit: "Weight", mu_id: 3 }, { resultsId: 10397, setNum: "3.75", desc: "kilograms", unit: "Weight", mu_id: 3 }] }, { key: "7", values: [{ resultsId: 10395, setNum: "8", desc: "times", unit: "Reps (left)", mu_id: 7 }, { resultsId: 10396, setNum: "7", desc: "times", unit: "Reps (left)", mu_id: 7 }, { resultsId: 10397, setNum: "10", desc: "times", unit: "Reps (left)", mu_id: 7 }] }, { key: "8", values: [{ resultsId: 10395, setNum: "8", desc: "times", unit: "Reps (right)", mu_id: 8 }, { resultsId: 10396, setNum: "8", desc: "times", unit: "Reps (right)", mu_id: 8 }, { resultsId: 10397, setNum: "9", desc: "times", unit: "Reps (right)", mu_id: 8 }] }] }];
    
    data.forEach(function (o) {
        o.totalWeight = o.values.map(function (a) {
            return a.values.map(function (b) {
                return +b.setNum;
            });
        }).reduceRight(function (a, b, j) {
            return a.map(function (v, i) {
                return j ? v + b[i] : v * b[i];
            });
        }).reduce(function (a, b) {
            return a + b;
        });
    });
    
    console.log(data);
    .as-console-wrapper { max-height: 100% !important; top: 0; }

    【讨论】:

      猜你喜欢
      • 2013-10-11
      • 2021-07-21
      • 1970-01-01
      • 1970-01-01
      • 2018-02-06
      • 2012-11-17
      • 1970-01-01
      • 1970-01-01
      • 2021-10-29
      相关资源
      最近更新 更多