重构代码:Array 内部的对象、数据呈现

Refactoring code: Object inside Array, data presentation

提问人:Zahid Abdullah 提问时间:11/16/2022 最后编辑:Zahid Abdullah 更新时间:11/16/2022 访问量:44

问:

我正在开发一个 React 原生 Android/iOS 应用程序。我有一个对象数组,如下所示:

const shots= [
{"heatNumber": 1, "heatShotHit": 0, "heatShotNumber": 1, "hit": false, "id": "e404bd61-0a96-4e21-b6aa-36ff433f16ad", "rangeNumber": 1, "shotNumber": 1, "shotValue": 0, "stationNumber": 1, "timeFromStart": 0, "xEnd": 6, "xStart": 5, "yEnd": 5, "yStart": 6}, 

{"heatNumber": 1, "heatShotHit": 1, "heatShotNumber": 2, "hit": true, "id": "1badd0dc-59a5-4b2f-97b4-db5fdc72e13d", "rangeNumber": 1, "shotNumber": 2, "shotValue": 10, "stationNumber": 1, "timeFromStart": 163, "xEnd": 2, "xStart": 1, "yEnd": 1, "yStart": 2}, 

{"heatNumber": 1, "heatShotHit": 2, "heatShotNumber": 3, "hit": true, "id": "50a7a92c-3b26-49df-8ab8-677d6978a0a2", "rangeNumber": 1, "shotNumber": 3, "shotValue": 10, "stationNumber": 1, "timeFromStart": 268, "xEnd": 1, "xStart": 1, "yEnd": 1, "yStart": 1}, 

{"heatNumber": 1, "heatShotHit": 3, "heatShotNumber": 4, "hit": true, "id": "04b82166-1466-4b92-8c45-5ef2ecce9930", "rangeNumber": 1, "shotNumber": 4, "shotValue": 10, "stationNumber": 1, "timeFromStart": 381, "xEnd": 1, "xStart": 1, "yEnd": 1, "yStart": 1}];

我需要从中得到 3 个值。

  1. 总命中数(对象总数)。
  2. heatShotHit 的最终数量 (finalHeatShotHit = heatShotHit 的最后一个对象键值 - heatShotHit 的第一个对象键值)。
  3. 未命中(总命中数 - finalHeatShotHit)。

我是这样写的代码,

    const heatCount = Object.keys(shots).length;
    const valueOfHitCalc = shots.map(a=>a.heatShotHit);
    const hit = valueOfHitCalc[valueOfHitCalc.length-1] - valueOfHitCalc[0];
    const miss = heatCount - hit;

任何人都可以建议我使用更好的代码/重构我的代码,这需要更短的执行时间吗?

JavaScript Android ReactJS 对象 重构

评论

0赞 Arnau 11/16/2022
你说你有一个对象,但实际上是一个对象数组......shots
0赞 arp 11/16/2022
你可以只做shots.length,而不是使用Object.keys
0赞 Zahid Abdullah 11/16/2022
对不起,这是一个错误,我修复了它。谢谢。@Arnau。
0赞 adiga 11/16/2022
为什么不使用常规循环并在其中进行求和和减法呢?
0赞 Neil Girardi 11/17/2022
我建议使用 Array.prototype.reduce 将对象数组减少为具有您需要的计算值的单个对象。我不知道它是否更快,但它“更干净”,更具可读性。

答: 暂无答案