vueJS 对嵌套表行进行排序

我有一个像这样的 json 对象列表(载体):

https://img4.mukewang.com/64e70d78000119af03280693.jpg

在我的 *.vue 中,我将其渲染为:


<tr v-for="carrier in this.carriers">

   <td>{{ carrier.id }}</td> ....

可以单击我的 thead / th's 对表进行排序,如下所示:


<thead>

   <tr>

      <th class="pointer link" @click="sort('id')">

         ID

         <span v-if="'id' === currentSortCol">

            {{currentSortDir ==='asc' ? '&#8593;':'&#8595;'}}

         </span>

      </th>

      <th class="pointer link" @click="sort('region.name')">

         Region

         <span v-if="'region.name' === currentSortCol">

            {{currentSortDir ==='asc' ? '&#8593;':'&#8595;'}}

         </span>

      </th>....

我的排序方法是这样的:


        sort(col) {

            if (this.currentSortCol === col) {

                this.currentSortDir = this.currentSortDir === "asc" ? "desc" : "asc";

            } else {

                this.currentSortCol = col;

            }

            this.carriers.sort(this.sortBy(col, this.currentSortDir));

        },

        sortBy(property, order) {

            this.currnetSortDir=order;

            return function(a, b) {

                const varA =

                    typeof a[property] === "string"

                        ? a[property].toUpperCase()

                        : a[property];

                const varB =

                    typeof b[property] === "string"

                        ? b[property].toUpperCase()

                        : b[property];


                let comparison = 0;

                if (varA > varB) comparison = 1;

                else if (varA < varB) comparison = -1;

                return order === "desc" ? comparison * -1 : comparison;

            };

        }

问题: 排序 asc, desc 与 ID (Carrier.id) 配合良好。但它不会对嵌套的 Carrier.region.name 列进行排序。如何对嵌套列进行排序,例如载体.区域.名称?


慕娘9325324
浏览 157回答 1
1回答

幕布斯7119047

您应该使用包中的“get”方法lodash来获取嵌套的道具:import _get from 'lodash/get'...const propValueA = _get(a, property);const propValueB = _get(b, property);const varA = typeof propValueA === "string" ? propValueA.toUpperCase() : propValueA;const varB = typeof propValueB === "string" ? propValueB.toUpperCase() : propValueB;
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript