javascript - 如何迭代按日期排序的对象?

标签 javascript html json

我遇到了烦人的问题。我为此苦苦挣扎了好几个小时。

我需要渲染按值 date 排序的数据(通过 ajax 调用获取)

所以 JSON 看起来像

user_a: 
   { message: 
      { text: 'Hello',
        date: 1547093749649,
       },
  user_b: 
   { message: 
      { text: 'Hi',
        date: 1547093749639,
        }
   }

当我的 JSON 来自数据库时,带有 text: Hello 的对象始终位于顶部。但令人惊讶的是,当我想用​​一些 HTML 显示数据时,渲染是随机显示的。有时 user_b 先来,其他时候这是 user_a。

我也尝试过通过基于js排序方法生成一个新的对象来重建对象

sortable.sort(function(a,b){
          return b - a
        })

但没有效果。

可能和我的迭代方法有关

var html = '<div>'

Object.keys(object).map((node,i) => {

html =+ '<p>'+object[node]['message']['text']+'</p>'

})

html =+ </div>

我很困惑,我不知道如何强制 HTML 以与 JSON 对象相同的顺序呈现对象键/值。

最佳答案

使用Object.entries , Array#map , Array#sort , Template literalsdestructuring .

首先根据日期降序对它们进行排序以保留顺序。

const data={user_a:{message:{text:"Hello",date:1547093749649}},user_b:{message:{text:"Hi",date:1547093749639}}};

const res = Object
.entries(data)
.sort(([,a], [,b])=>b.message.date - a.message.date)
.map(([user,{message}])=>{
  return `
    <div>
      <p>${user}; ${message.text}; ${message.date}</p>
    </div>
  `
}).join("");

document.body.innerHTML = res;

关于javascript - 如何迭代按日期排序的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54129032/

相关文章:

javascript - 如何在 TypeScript 中修复 "Initializer provides no value for this binding element and the binding element has no default value"?

javascript - 使用 javaScript 隐藏和显示内容

html - scrapy css last-child 选择器无法选择文本

json - Spring @ResponseBody Jackson JsonSerializer 与 JodaTime

javascript - 告诉 AngularJs 通过依赖注入(inject)返回一个新实例

php - 如何检查给定的非凸区域是否与给定的矩形完全重叠

html - 为什么这些 div 消失了?

javascript - 对数据库的 API 响应中的字符串进行编码或转义?

c# - 查看Json响应码,发现windows phone 8.1的错误

javascript - 全页.js : Sections have higher height than content