首页 > 解决方案 > 如何在for循环中将包含子字符串的值分成单独的数组

问题描述

我可能不会很好地提出这个问题,但我有一个 JSON 数组,我解析它以这种格式提取时间值:

(2020-01-08T20:00:03.492Z)

我想按日期分隔唯一时间。因此,我使用'T'索引处的子字符串在for循环中拆分字符串并创建一个新数组,然后将其过滤为仅包含唯一值,例如:

数组(6)[“2020-01-10”、“2020-01-08”、“2020-01-07”、“2020-01-06”、“2019-12-23”、“2019-12- 17"]

我现在想要获取这些值中的每一个,将其与 JSON 响应的原始输出相关联,以提取包含指定日期的漏洞数量的不同字段“vulnerabilitiesCount”,并将这些值添加到上面数组中的每个日期。我不知道如何去循环遍历唯一数组中的每个索引。下面的代码完成了我想要为数组的第一个索引实现的目标。提前感谢任何输入!

        let arrTwo = [];
        let arrThree = [];
        for(var i=0; i<jsonP.length; i++)
        {
          var jtStr = jsonP[i].time
          // for(b in unique){
            var j = jtStr.includes(unique[0]);
            if(j === true){
              arrTwo.push(jtStr);
            }                
            for(var d=0;d<=arrTwo.length;d++){
              if(arrTwo[d]==jsonP[i].time){
                arrThree.push(jsonP[i].vulnerabilitiesCount);
              }
            }
        // }
        }            
        var sum = 0;
        for(f=0;f<=arrThree.length;f++){
          sum += parseInt(arrThree[f]);
        }

标签: javascriptarrays

解决方案


请记住,您的 JSON 与我用于代码的 JSON 相似,它应该是这样的:

const data = {
  time: ["(2020-01-08T20:00:03.492Z)"],
  vulnerabilitiesCount: [1, 2]
}

let timesArray = [];

for(let i = 0; i < data.time.length; i++) {
  let formTime = data.time[i].replace("(", "");
  formTime = formTime.replace(")", "");

  let parsedTime = new Date(formTime);

  let month = parsedTime.getMonth()+1;
  if(month < 10) {
    month = "0" + month;
  }

  let timeFormatted = parsedTime.getFullYear() + "-" + month + "-" + parsedTime.getDate();

  let fullTime = {
    time: "",
    vulnerabilitiesCount: 0 
  }

  if(timesArray.find(t => t.time == parsedTime)) {
    continue;
  }

  fullTime.time = timeFormatted;
  if(data.vulnerabilitiesCount[i] > 0) fullTime.vulnerabilitiesCount = data.vulnerabilitiesCount[i];

  timesArray.push(fullTime)
}

希望这可以帮助。


推荐阅读