【问题标题】:Given Two Array of Objects in JavaScript, How to Modify the Data to a New Array of Objects based on the Requirement?JavaScript中给定两个对象数组,如何根据需求将数据修改为新的对象数组?
【发布时间】:2022-01-12 19:20:28
【问题描述】:

下面的数据是两个给定的对象数组。 第一个变量 vacStatus 包含有关州的疫苗接种状态、接种疫苗的日期和人数的信息。 第二个变量 census2020 包含有关州和总人口的信息。

let vacStatus = [
    {"st": "Connecticut", "date": "12/05/2021", "vac": 3031233},
    {"st": "Connecticut", "date": "12/06/2021", "vac": 3031723},
    {"st": "New Jersey", "date": "01/08/2022", "vac": 7554407},
    {"st": "New Jersey", "date": "01/09/2022", "vac": 7560007},
    {"st": "New Jersey", "date": "01/10/2022", "vac": 7562207},
    {"st": "New Jersey", "date": "01/11/2022", "vac": 7564407},
    {"st": "New York", "date": "01/09/2022", "vac": 16625152},
    {"st": "New York", "date": "01/10/2022", "vac": 16626152},
    {"st": "Pennsylvania", "date": "01/10/2022", "vac": 10208537},
    {"st": "Pennsylvania", "date": "01/11/2022", "vac": 10218537},
    {"st": "Rhode Island", "date": "01/11/2022", "vac": 961320},
    {"st": "Vermont", "date": "01/11/2022", "vac": 564218},
];

let census2020 = [
    {"st": "Connecticut", "ppl": 3605944},
    {"st": "Maine", "ppl": 1362359},
    {"st": "Massachusetts", "ppl": 7029917},
    {"st": "New Hampshire", "ppl": 1377529},
    {"st": "Rhode Island", "ppl": 1097379},
    {"st": "Vermont", "ppl": 643077},
];

下面是我想从上面两个给定的对象数组中得到的结果。 请注意,r 是根据该州的总人数(来自 2020 年人口普查的数据)和最近的疫苗状态数据(来自 vacStatus 的数据,其中“日期”是距今天最近的日期)

// Your result should look like:
let vacRate = [
    {"st": "Connecticut", "r": 0.8407570943974726},
    {"st": "New Jersey", "r": null},
    {"st": "New York", "r": null},
    {"st": "Pennsylvania", "r": null},
    {"st": "Rhode Island", "r": 0.8760145765501254},
    {"st": "Vermont", "r": 0.8773723830894279},
];

以下是我的解决方案,但不正确!!!!

let vacRate = [];
for (i = 0; i < vacStatus.length; i++ ){
    let state = vacStatus[i]["st"]
  let vacPpl = vacStatus[i]["vac"]
  let tempData = {"st": state, "r": null};
  for (let each of census2020) {
    if(each["st"] == state){
        let pplInfo = each.ppl;
      tempData = {"st": state, "r": vacPpl / pplInfo};
      vacRate.push(tempData)
    }
  }
  vacRate.push(tempData)
}
console.log(vacRate)
console.log(vacRate.length)

能否请您帮助我了解如何在 vacRate 中正确获取数据?我承认我非常不擅长对象数组,但它是一种非常有用且经常使用的数据结构。

感谢您的帮助!!!

【问题讨论】:

    标签: javascript arrays object


    【解决方案1】:

    我不知道你想要做什么的太多细节,但我可以得到这样的值:

    const rate = vacStatus.map((status) => {
      const currentCensus = census2020.find((census) => census.st === status.st);
      const vacRate = status.vac / currentCensus?.ppl || null;
    
      return {
        st: status.st,
        r: vacRate,
      };
    });
    

    在计算费率之前,您是否需要将同一州和不同日期的“vac”相加?如果是这样,方法需要不同:

    const sanitizedVacStatus = Array.from(
      vacStatus.reduce((m, { st, vac }) => m.set(st, (m.get(st) || 0) + vac), new Map()),
      ([st, vac]) => ({ st, vac })
    );
    

    首先,您需要用 vac 值对所有相等的城市求和,然后每个城市只返回一项(在这种情况下,不包括日期)。

    然后您可以使用sanitizedVacStatus 作为第一张地图的值,而不是vacStatus

    【讨论】:

    • 感谢您的回复。 currentCensus?.ppl 是什么意思?
    • currentCensus 是一个任意名称,用于引用我用于计算的人口普查。 currentCensus?.ppl 基本上是在访问 ppl 密钥。在这种情况下,可选链接 (?.) 实际上是可选的。我写它是因为我习惯了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-20
    • 1970-01-01
    • 2021-12-25
    • 2020-01-12
    • 2020-12-03
    • 2021-12-25
    • 2020-11-15
    相关资源
    最近更新 更多