【问题标题】:VueJS2 sorting JSONVueJS2 排序 JSON
【发布时间】:2018-06-03 11:48:16
【问题描述】:

我有一个 v-for,它将通过 JSON 响应中的消息并将它们打印到屏幕上。消息按时间顺序来自服务器,但是当我通过 Vue chrome 插件查看数据时,数据会按字母顺序重新排序。

我有一个简单的例子。

这是通过 Postman 请求的 JSON:

{
    "e": "e",
    "d": "d",
    "c": "c",
    "b": "b",
    "a": "a"
}

当我通过 Vue 进行调用并使用 v-for 进行渲染时,结果相同:

data:Object
a:"a"
b:"b"
c:"c"
d:"d"
e:"e"

所以问题是,我可以阻止 Vue 重新排序我的数据吗?如果没有,我应该如何正确地重新订购?

【问题讨论】:

  • 不能保证对象中键的顺序,它由迭代方法决定或根本不决定。如果排序顺序很重要,通常最好不要使用对象。
  • JSON 对象没有特定的顺序,也不能保证保持您放入的顺序。我建议改为传递数组而不是对象,然后根据需要进行转换。

标签: javascript json vue.js vuejs2


【解决方案1】:

正如评论者所指出的,对象中键的顺序无法保证,因此您最好的选择是让您的服务器以有序结构(如数组)发出消息。

如果这不可能,我发现键顺序通常保存在一次性创建的对象中(例如您的 JSON 数据)。 Object.keys(data),会给你一个 keys 数组,可能在原始顺序中。

所以不是类似的东西

<div v-for="value in data">

做

<div v-for="key in Object.keys(data)">

然后使用data[key]获取值。

你也可以试试Object.entries看你是否需要IE支持。

如果这将被广泛部署,预计它会在某个时候为某人打破。如果您只需要适合您的东西,这可以做到。

【讨论】:

  • 谢谢,这很好用。真的很遗憾,似乎没有更优雅的方式来做到这一点。似乎 vue 正在做一些事情,就好像我尝试用 jquery 做类似的操作一样,它保留了来自服务器的订单。无论如何,再次感谢
猜你喜欢
  • 1970-01-01
  • 2018-04-06
  • 2018-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-02
  • 2019-06-09
  • 2018-06-03
相关资源
最近更新 更多