首页 > 解决方案 > javascript中的Json自定义问题

问题描述

handleHitDrop = (arr) => {
  for (let i = 0; i < arr.length; i++) {
    let hit_drop = arr[i]["Z" + (i + 1)]["Drop"][0] + arr[i]["Z" + (i + 1)]["Hit"][0]
    arr[i]["Z" + (i + 1)] = hit_drop
  }
  console.log(arr)
}



data = [{
  "Z1": {
    "Drop": [
      0
    ],
    "Hit": [
      0
    ]
  },
  "Z2": {
    "Drop": [
      0
    ],
    "Hit": [
      1
    ]
  },
  "Z3": {
    "Drop": [
      1
    ],
    "Hit": [
      1
    ]
  }
}]



handleHitDrop(data)

预期结果:

[
  {
    "Z1": 0,
    "Z2": 1,
    "Z3": 2
  }
]

在这里,我正在尝试自定义我现有的 json。尝试添加 Drop 和 Hit 的第一个元素并分配给父键。

这是我尝试做的事情,但它只适用于第一个(Z1)

标签: javascript

解决方案


您应该避免使用文字“Z”和序列号来制作这些数组属性。只需遍历属性。 Object.entries并且Object.fromEntries可以用于一个很好的功能方法:

let data = [{"Z1": {"Drop": [0],"Hit": [0]},"Z2": {"Drop": [0],"Hit": [1]},"Z3": {"Drop": [1],"Hit": [1]}}]

data = data.map(obj => Object.fromEntries(
    Object.entries(obj).map(([z, {Drop, Hit}]) => [z, Drop[0] + Hit[0]])
));

console.log(data);

您自己的代码的问题在于i整个数组中的索引,而不是Z属性:为此,您需要另一个嵌套循环。


推荐阅读