【问题标题】:Typescript JSON : Adding child attributes and displaying against parent item attributesTypescript JSON:添加子属性并根据父项属性显示
【发布时间】:2018-09-06 04:39:18
【问题描述】:

下面是我需要处理的Json

var oldArr =
[{
"careerLevel": "Associate",
"careerLevels": [
    {
        "201609": 21,
        "201610": 22,
        "careerID": "10000120"
    },
    {
        "201609": 31,
        "201610": 32,
        "careerID": "10000130"
    }]}];

并将上面的json转换为:

var newArr= [{
"201609": 52,
"201610": 54,
"careerLevel": "Associate",
"careerLevels": [
    {
        "201609": 21,
        "201610": 22,
        "careerID": "10000120"
    },
    {
        "201609": 31,
        "201610": 32,
        "careerID": "10000130"
    }]

}];

我正在尝试使用 reduce() 函数求和:

var arr = [{x:1},{x:2},{x:4}];

  arr.reduce(function (a, b) {
    return {x: a.x + b.x};
  });

  console.log(arr); //Outputs that same initial array

var reduceArr = oldArr.reduce((sum, item) =>
const total = sum + item.201609; // this gives me error

);

我对 reduce 函数有一些想法,但我对这些东西还是新手。

【问题讨论】:

  • 告诉我们你在这方面做了什么尝试。
  • 我创建了 2 个循环。一个用于careerLevels,另一个用于careerLevels(获取careerIds)。然后我试图伸出手来总结每个属性。但在那之后我就卡住了。
  • @Rishabh 如果您对自己的代码有疑问,请发布您拥有的代码。否则,很难提供有用的答案。见stackoverflow.com/help/how-to-ask
  • 我应该如何编辑它,我没有得到编辑问题的选项
  • 您的问题正下方有一个“编辑”链接。

标签: json typescript


【解决方案1】:

我不知道为什么没有人尝试这个问题。尽管人们很快就投了反对票。 我创建了以下代码以获得所需的结果:

 var oldArr =
       {

       "careerLevel": "Associate",
       "careerLevels": [
           {
               "201609": 21,
               "201610": 22,
               "201611": 23,
               "careerID": "10000120"
           },
           {
               "201609": 31,
               "201610": 32,
               "201611": 33,
               "careerID": "10000130"
           }]
   };



   var finalSummedJson = JSON.stringify(SummationProcessing(oldArr));
   return finalSummedJson;


}

// Summation Logic

 function SummationProcessing(oldArr) {
  let sumArr = [];
  let allKeysInLevels = Object.keys(oldArr.careerLevels[0]);
  let uniqueKeys = allKeysInLevels.filter((key, index) => {
      return parseInt(key) > 0 && allKeysInLevels.indexOf(key) == index
  });

  uniqueKeys.forEach(uniqueKey => {
      var sumKey = oldArr.careerLevels.reduce((acc, val) => {
          return acc + val[uniqueKey];
      }, 0);

      sumArr.push(sumKey);
  });

  var reducedData = oldArr.careerLevels.reduce((redArr, inpArr) => {
      var keysToFilter = Object.keys(inpArr);
      var keyysss = keysToFilter.filter((key, index) => { return parseInt(key) > 0 && keysToFilter.indexOf(key) == index });
      keyysss.forEach((element, i) => {
          if (!redArr[element]) {
              redArr[element] = sumArr[i];
          }
          // });
      });
      return redArr;

  }, {});
  // console.log("reducedData", JSON.stringify(reducedData));

  Object.keys(reducedData).forEach(key => { oldArr[key] = reducedData[key] });
  return oldArr;

  // console.log("finalArr", oldArr);
}

最终结果是:

{ “201609”:52, “201610”:54, “201611”:56, "careerLevel": "Associate", “职业水平”:[{ “201609”:21, “201610”:22, “201611”:23, “职业ID”:“10000120” }, { “201609”:31, “201610”:32, “201611”:33, “职业ID”:“10000130” }] }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-15
    • 2017-04-24
    • 1970-01-01
    • 1970-01-01
    • 2012-05-03
    • 2018-11-28
    • 2021-10-01
    相关资源
    最近更新 更多