javascript - 如何修改/重新转换 JSON 数组结构

标签 javascript jquery json

[{"id":"15","heading":"Post1","content":"Post 1 Content","date":"2016-11-09 08:51:37"},
{"id":"16","heading":"Post2","content":"Post 2 Content","date":"2016-11-09 08:52:09"},
{"id":"17","heading":"Post3","content":"Post 3 Content","date":"2015-06-09 08:52:09"}]

我有上面的 JSON 数组。我正在尝试将其转换为 JSON 对象作为

2016
    Nov
        Post1
        Post2
2015
   June
        Post3

我能够通过以下方式在 PHP 中实现这一点

while ($row = mysqli_fetch_row($result)) {
    $year = date('Y', strtotime($row['2']));
    $month = date('M', strtotime($row['2']));
    $navarray[$year][$month][] = array($row[0], $row[1], $row[3]);
}

但无法在 JS 中解决。

最佳答案

与 PHP 不同,如果对象不存在,您必须创建它们:

var monthNames = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]

ar = [{"id":"15","heading":"Post1","content":"Post 1 Content","date":"2016-11-09 08:51:37"},
{"id":"16","heading":"Post2","content":"Post 2 Content","date":"2016-11-09 08:52:09"},
{"id":"17","heading":"Post3","content":"Post 3 Content","date":"2015-06-09 08:52:09"}]

obj = {}
ar.forEach(function(v) {
  d = new Date(v.date);
  m = monthNames[d.getMonth()]
  if (!obj.hasOwnProperty(d.getFullYear())) {
    obj[d.getFullYear()] = {}
  }
  if (!obj[d.getFullYear()].hasOwnProperty(m)) {
    obj[d.getFullYear()][m] = []
  }
  obj[d.getFullYear()][m].push(v.heading)
})
console.log(obj)

关于javascript - 如何修改/重新转换 JSON 数组结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40499946/

相关文章:

javascript - 使用 javascript 执行查找/匹配,忽略特殊语言字符(例如重音)?

javascript - d3 与 vue.js 组件集成

javascript - Jquery Ajax 服务器轮询;根据早期的 ajax 响应轮询服务器

javascript - 无法在 JSON 对象内动态添加值

php - PHP 和 node.js 可以在同一台服务器上运行吗

javascript - jQuery 自定义快门

javascript - 我使用以下条件将输入值分割为 '-' 。如果输入仅为 123,如何限制第二个值

python - Python 中的任意字典 (JSON) 到更严格的树状字典 (JSON)

jquery - jQPlot 图表在 jquery mobile 弹出窗口中不起作用

javascript - 拉伸(stretch) div 但不是整个页面