【问题标题】:format data with year and moth presence javascript使用年份和月份存在javascript格式化数据
【发布时间】:2019-05-30 16:26:09
【问题描述】:

我有这种json对象

[  {
    "camera_name": "Bolands Mills Arup",
    "exid": "bolands-mills-arup",
    "latest_snapshot_date": "2019-05-30T07:06:55+01:00",
    "oldest_snapshot_date": "2015-12-24T23:33:23+00:00",
    "years": {
      "2015": [
        "12"
      ],
      "2016": [
        "04",
        "08",
        "09",
        "10",
        "02",
        "06",
        "03",
        "11",
        "12",
        "01",
        "07",
        "05"
      ],
      "2017": [
        "04",
        "07",
        "10",
        "09",
        "11",
        "01",
        "02",
        "03",
        "05",
        "06",
        "08",
        "11",
        "12"
      ],
      "2018": [
        "03",
        "05",
        "06",
        "10",
        "11",
        "01",
        "02",
        "08",
        "09",
        "04",
        "07",
        "11",
        "12"
      ],
      "2019": [
        "01",
        "02",
        "03",
        "04",
        "05"
      ]
    }
  },
  {
    "camera_name": "Walls Demo",
    "exid": "central-bank-fusion",
    "latest_snapshot_date": "2019-05-30T07:07:02+01:00",
    "oldest_snapshot_date": "2015-11-08T16:30:48+00:00",
    "years": {
      "2015": [
        "12",
        "11"
      ],
      "2016": [
        "02",
        "03",
        "05"
      ],
      "2017": [
        "03",
        "08",
        "10",
        "02",
        "04",
        "05",
        "06",
        "07",
        "09",
        "11",
        "01",
        "11",
        "12"
      ],
      "2018": [
        "03",
        "04",
        "07",
        "09",
        "01",
        "02",
        "08",
        "10",
        "11",
        "05",
        "06",
        "11",
        "12"
      ],
      "2019": [
        "01",
        "02",
        "03",
        "04",
        "05"
      ]
    }
  }
]

我有一个带有年份名称的参数,其值可以是 2015 年到 2019 年。我要做的是创建一个方法,该方法将用年份和月份值格式化这些数据。

我有这样的月份模式

 let months_chars = {
    "01":"jan", 
    "02":"feb", 
    "03":"mar",
    "04":"apr",
    "05":"may",
    "06":"jun",
    "07":"jul",
    "08":"aug",
    "09":"sep",
    "10":"oct",
    "11":"nov",
    "12":"dec"
  }

用户正在选择年份值,例如,如果用户选择 2016 年,则下方的数据将如下所示。

  {
    "camera_name": "Walls Demo",
    "exid": "central-bank-fusion",
    "latest_snapshot_date": "2019-05-30T07:07:02+01:00",
    "oldest_snapshot_date": "2015-11-08T16:30:48+00:00",
    "jan": 0,
    "feb": 1,
    "mar": 1,
    "apr": 0,
    "may", 1,
    ...
    "dec": 0
  }

如果存在月份,它将遍历年现值,然后添加月份字符并将 1 放在前面,如果没有,则仍然放置一个月并将 0 放在前面。

任何帮助将不胜感激,我已经做到了这一点,

  let months_chars = {
    "01":"jan", 
    "02":"feb", 
    "03":"mar",
    "04":"apr",
    "05":"may",
    "06":"jun",
    "07":"jul",
    "08":"aug",
    "09":"sep",
    "10":"oct",
    "11":"nov",
    "12":"dec"
  }
  let year = this.year;

  let formatedData =
    data.map((camera) => {
      let present_months = data["years"][`${year}`]

    });

此外,我无法按要求格式化数据。

【问题讨论】:

  • 我们如何知道用户选择年份时会选择哪个对象?因为这两个对象都包含一个 2016 年的对象,例如
  • 它将格式化两个对象,而不仅仅是一个。如果用户选择 2016,两个对象都会发生同样的事情。
  • 一年是一个选项,它将遍历所有对象一年。我只是把一个对象放在结果问题上。

标签: javascript


【解决方案1】:

这应该可行。使用map()循环遍历每个对象,循环遍历每个months_chars来检查years是否包含key,true返回1,false返回0:

const cameras = [{
    "camera_name": "Bolands Mills Arup",
    "exid": "bolands-mills-arup",
    "latest_snapshot_date": "2019-05-30T07:06:55+01:00",
    "oldest_snapshot_date": "2015-12-24T23:33:23+00:00",
    "years": {
      "2015": [
        "12"
      ],
      "2016": [
        "04",
        "08",
        "09",
        "10",
        "02",
        "06",
        "03",
        "11",
        "12",
        "01",
        "07",
        "05"
      ],
      "2017": [
        "04",
        "07",
        "10",
        "09",
        "11",
        "01",
        "02",
        "03",
        "05",
        "06",
        "08",
        "11",
        "12"
      ],
      "2018": [
        "03",
        "05",
        "06",
        "10",
        "11",
        "01",
        "02",
        "08",
        "09",
        "04",
        "07",
        "11",
        "12"
      ],
      "2019": [
        "01",
        "02",
        "03",
        "04",
        "05"
      ]
    }
  },
  {
    "camera_name": "Walls Demo",
    "exid": "central-bank-fusion",
    "latest_snapshot_date": "2019-05-30T07:07:02+01:00",
    "oldest_snapshot_date": "2015-11-08T16:30:48+00:00",
    "years": {
      "2015": [
        "12",
        "11"
      ],
      "2016": [
        "02",
        "03",
        "05"
      ],
      "2017": [
        "03",
        "08",
        "10",
        "02",
        "04",
        "05",
        "06",
        "07",
        "09",
        "11",
        "01",
        "11",
        "12"
      ],
      "2018": [
        "03",
        "04",
        "07",
        "09",
        "01",
        "02",
        "08",
        "10",
        "11",
        "05",
        "06",
        "11",
        "12"
      ],
      "2019": [
        "01",
        "02",
        "03",
        "04",
        "05"
      ]
    }
  }
]

let months_chars = {
  "01": "jan",
  "02": "feb",
  "03": "mar",
  "04": "apr",
  "05": "may",
  "06": "jun",
  "07": "jul",
  "08": "aug",
  "09": "sep",
  "10": "oct",
  "11": "nov",
  "12": "dec"
}

var input = 2016
var obj = cameras.map(({years, ...obj}) => {
  var months = years[input]
  for(var i in months_chars) {
    months.includes(i) ? obj[months_chars[i]] = 1 : obj[months_chars[i]] = 0
  }
  return obj
  
})

console.log(obj)

【讨论】:

  • 确实如此,你可能无法使用提示,所以我将硬编码一个变量。
  • 感谢科比。你是一个伟大的球员。 :D
  • 没问题。如果您需要任何其他帮助,请随时提出。
  • 我要发布同样的问题,你能帮忙吗?
  • 确定是什么问题?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-12-07
  • 1970-01-01
  • 2017-08-13
  • 2018-06-26
  • 1970-01-01
  • 2014-08-07
  • 2016-06-25
相关资源
最近更新 更多