javascript - Vue.js:v-for 超过对象会导致键的顺序错误

标签 javascript vue.js vuejs2

我遇到了 Vue 不尊重顺序的问题。 我作为 prop 传递给 vue 组件的初始数据如下所示:

[
  { id: 1, event_name: "event 1", scheduled_at: "2021-01-01" },
  { id: 2, event_name: "event 2", scheduled_at: "2021-01-01" },
  { id: 3, event_name: "event 3", scheduled_at: "2021-01-05" },
  { id: 4, event_name: "event 4", scheduled_at: "2021-01-05" },
  { id: 5, event_name: "event 5", scheduled_at: "2021-01-02" }
]

然后我有一个compated prop groupedEvents,它按日期对事件进行分组(使用lodash groupBy)。 输出如下:

{
  2021-01-01: [
    { id: 1, event_name: "event 1", scheduled_at: "2021-01-01" },
    { id: 2, event_name: "event 2", scheduled_at: "2021-01-01" },
  ],
  2021-01-02: [
    { id: 5, event_name: "event 5", scheduled_at: "2021-01-02" }
  ],
  2021-01-05: [
    { id: 3, event_name: "event 3", scheduled_at: "2021-01-05" },
    { id: 4, event_name: "event 4", scheduled_at: "2021-01-05" },
  ]
}

问题:当我对 groupedEvents 执行 v-for 时,组的顺序错误/被忽略。

<div v-for="(group, key) in groupedEvents">{{ key }}</div>

输出为

2021-01-01
2021-01-05
2021-01-02

而不是

2021-01-01
2021-01-02
2021-01-05

Ps:排序函数:

let grouped = _.groupBy(this.events, (event) => { return event.scheduled_at })

最佳答案

您可以迭代 groupedEventssorted 键,它也可以是使用自定义排序技术的另一个计算属性:

const childcomponent = Vue.component('childcomponent', {
  template: '#childcomponent',
  props: ['events'],
  computed: {
    groupedEvents() {
      return _.groupBy(this.events, 'scheduled_at');
    }
  }
});

new Vue({
  el:"#app",
  components: { childcomponent },
  data: () => ({
    events: [
      {id: 1, event_name: "event 1", scheduled_at: "2021-01-01"},
      {id: 2, event_name: "event 2", scheduled_at: "2021-01-01"},
      {id: 3, event_name: "event 3", scheduled_at: "2021-01-05"},
      {id: 4, event_name: "event 4", scheduled_at: "2021-01-05"},
      {id: 5, event_name: "event 5", scheduled_at: "2021-01-02"}
    ]
  })
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.20/lodash.min.js" integrity="sha512-90vH1Z83AJY9DmlWa8WkjkV79yfS2n2Oxhsi2dZbIv0nC4E6m5AbH8Nh156kkM7JePmqD6tcZsfad1ueoaovww==" crossorigin="anonymous"></script>

<template id="childcomponent">
  <ul>
    <li v-for="key in Object.keys(groupedEvents).sort()">
      {{ key }}: {{ groupedEvents[key] }}
    </li>
  </ul>
</template>

<div id="app"><childcomponent :events="events"/></div>

关于javascript - Vue.js:v-for 超过对象会导致键的顺序错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65999028/

相关文章:

javascript - d3.js 圆的半径可以由样式属性指定吗?

javascript - 语法错误 : let is disallowed as a lexically bound name

javascript - VueJS @click 带 anchor 标签

javascript - Vue.js 销毁在组件内运行的 setInterval

javascript - Vue.js 到 Node.js 服务器 : How can I secure my POST call?

vue.js - 通过routerlink Vuejs传递对象

vue.js - 将事件传递到组件 VueJS 的元素上

javascript - 将 Express.js-REST-Endpoint 与 Meteor 应用程序集成

javascript - 是否可以合并javascript文件以避免过多的http请求

javascript - 在 jquery 回调处理程序中保留变量