首页 > 解决方案 > JavaScript:如何向现有的 JSON 数组添加新项目?

问题描述

我有一个 JSON 数组,如下所示:

0: {stop: "C.-D.-Friedrich Straße", time: "04:38:00", realtime: "04:39:00"}
1: {stop: "Zellescher Weg", time: "04:40:00", realtime: "04:40:00"}
2: {stop: "SLUB", time: "04:41:00", realtime: "04:41:00"}
3: {stop: "TU Dresden", time: "04:42:00", realtime: "04:41:00"}
4: {stop: "Nürnberger Platz", time: "04:43:00", realtime: "04:42:00"}
5: {stop: "Bernhardstraße", time: "04:44:00", realtime: "04:43:00"}
6: {stop: "Chemnitzer Straße", time: "04:45:00", realtime: "04:44:00"}
7: {stop: "Löbtau", time: "04:47:00", realtime: "04:47:00"}

这种结构在我的 JSON 数组中重复了 210 次:

在此处输入图像描述

现在我想在每个停止数组中添加两个新项目,例如:

0: {stop: "C.-D.-Friedrich Straße", time: "04:38:00", realtime: "04:39:00", diff_minute: "1", diff_hour: "0"}

我的尝试:

    for (var i = 0; i < trainsData.length; i++){
        for (var j = 0; j < trainsData[i].stops.length; j ++){
            var start = trainsData[i].stops[j].time;
            var end = trainsData[i].stops[j].realtime;

            start = start.split(":");
            end = end.split(":");

            var startDate = new Date(0, 0, 0, start[0], start[1], start[2]);
            var endDate = new Date(0, 0, 0, end[0], end[1], end[2]);

            var diff = endDate.getTime() - startDate.getTime();

            var hours = Math.floor(diff / 1000 / 60 / 60);
            diff -= hours * 1000 * 60 * 60;
            var minutes = Math.floor(diff / 1000 / 60);

            timeDifference = [{diff_minute: minutes, diff_hour: hours}];
            trainsData[i].stops[j].push(timeDifference)
        }
    }

不幸的是,我收到 trainsData[i].stops[j].push 不是函数的错误。

如果有人可以帮助我,那就太好了。

标签: javascriptarrays

解决方案


你可以做:

const trainsData = [{stop: "C.-D.-Friedrich Straße",time: "04:38:00",realtime: "04:39:00"},{stop: "Zellescher Weg",time: "04:40:00",realtime: "04:40:00"},{stop: "SLUB",time: "04:41:00",realtime: "04:41:00"},{stop: "TU Dresden",time: "04:42:00",realtime: "04:41:00"},{stop: "Nürnberger Platz",time: "04:43:00",realtime: "04:42:00"},{stop: "Bernhardstraße",time: "04:44:00",realtime: "04:43:00"},{stop: "Chemnitzer Straße",time: "04:45:00",realtime: "04:44:00"},{stop: "Löbtau",time: "04:47:00",realtime: "04:47:00"}]

const result = trainsData.map((item) => {
  const start = item.time.split(':')
  const end = item.realtime.split(':')

  const startDate = new Date(0, 0, 0, start[0], start[1], start[2])
  const endDate = new Date(0, 0, 0, end[0], end[1], end[2])

  let diff = endDate.getTime() - startDate.getTime()

  const hours = Math.floor(diff / 1000 / 60 / 60)
  diff -= hours * 1000 * 60 * 60
  const minutes = Math.floor(diff / 1000 / 60)
  
  const timeDifference = {
    diff_minute: minutes,
    diff_hour: hours
  }
  
  // new item keys
  return { ...item, ...timeDifference }
})

console.log(result)
.as-console-wrapper {max-height: 100% !important;top: 0;}


推荐阅读