首页 > 解决方案 > JSON 数组,javascript 计数

问题描述

我在名为 data.json 的本地文件中有一个 JSON 数组,如下所示:

[
    {
        "id":"1",
        "priority": "P1",
        "start_date": "2021-01-01 14:40:33"
    },{
        "id":"2",
        "priority": "P2",
        "start_date": "2019-01-01 14:40:33"
    },{
        "id":"3",
        "priority": "P3",
        "start_date": "2020-01-01 14:40:33"
    },{
        "id":"4",
        "priority": "P2",
        "start_date": "2020-01-01 14:40:33"
    },{
        "id":"5",
        "priority": "P1",
        "start_date": "2021-01-01 14:40:33"
    }
]

我正在尝试通过如下所示的两个条件设置总计数,但是 start_date YYYY-MM-DD HH-MM-SS 上的格式是静态的并且无法更改,我希望能够查找只有前 4 位数字(年份),但仍然无法,有什么问题吗?

import data from "./data.json" assert{ type: "json" };

    var count = 0;
    for (var i = 0; i < data.length; i++) {
        if ((data[i].priority === 'P1') && (data[i].start_date === "2021")) {
            count++;
        }
    }
    console.log(count)

标签: javascripthtmljson

解决方案


改用String.prototype.startsWith怎么样:

import data from "./data.json";

let count = 0;

for (let i = 0; i < data.length; i++) {
  if (data[i].priority === "P1" && data[i].start_date.startsWith("2021")) {
    count++;
  }
}

console.log(count);

您也可以尝试改用Array.prototype.filter

const count = data.filter(
  item => item.priority === "P1" && item.start_date.startsWith("2021")
).length;
   

或解构:

const count = data.filter(
  ({ priority, start_date }) =>
    priority === "P1" && start_date.startsWith("2021")
).length;

推荐阅读