首页 > 解决方案 > 如何将 JSON 数据分解为子字符串,以便以后计算?

问题描述

我已经被这个问题困扰了几天,无法弄清楚。

以下是我拥有的数据:

    body = {
      columns: {
        links: [
          "link1 ,\nlink2\n",
          "link3 ,\nlink4\n"
        ],
        timestamps: [
          "[2:00-4:30, 5:53-7:23],\n[15:15-16:16, 45:43-47:32, 1:02:30-1:03:45]",
          "[1:00-3:20, 8:50-9:20],\n[18:50-19:30, 42:00-46:28, 1:05:31-1:08:00]"
        ]
      }
    };

link1 的时间戳为 2:00-4:30 和 5:53-7:23,link2 的时间戳为 15:15-16:16、45:43-47:32、1:02:30-1 :03:45,但是,它们在一个字符串中,与“link1,link2\n”相同

我打算做的如下

例如:

body["columns"]["timestamps"][0]  // "[2:00-4:30, 5:00-7:00],\n[15:15-16:16, 45:43-47:32, 1:02:30-1:03:45]"

timestamp_group = body["columns"][timestamps][0].match(/(?<=\[)(.*?)(?=\])/g)[0]  // "[2:00-4:30, 5:00-7:00]"

//by using timestamp_group.split('-')
timestamp_group[] // ["2:00-4:30", "5:00-7:00"]

//further split into ["2:00", "4:30"]

//then using hmsToSecondsOnly() to make it into [120,270]

function hmsToSecondsOnly(str) {
    var p = str.split(':'),
        s = 0, m = 1;

    while (p.length > 0) {
        s += m * parseInt(p.pop(), 10);
        m *= 60;
    }

    return s;
}

最终会是这样的:

   [[120,270],[300, 420]],[[,],[,],[,]]

然后我可以将链接映射到时间戳。

body["columns"]["links"][0][0] to body["columns"]["timestamps"][0][0]

并计算它们的持续时间。

我想避免使用太多嵌套的 for 循环,有没有更好(优雅)的方法来解决这个问题?谢谢。

我不确定如何正确循环它们。如果使用 forEach,我应该如何开始(嵌套或递归?)这是我在控制台中尝试过的尝试。

在此处输入图像描述

在此处输入图像描述

标签: javascriptjson

解决方案


推荐阅读