在自定义筛选器上排序数组

时间:2015-09-28 18:39:17

标签: javascript arrays sorting vue.js

我有一个名为removeIndex的自定义过滤器,它会删除数组的第一个索引。我想修改它,所以它首先对数组进行排序,然后删除第一个索引。但是,当我尝试这样做时,我的应用程序冻结了。这就是我所拥有的:

filters: {
    removeIndex: function(value) {
        sort(value); // this crashes my browser
        return value.slice(1, value.length);
    }
}

为什么会导致我的浏览器崩溃?还有另一种方法我应该这样做吗?我只想在切片之前对数组进行排序。

更新:当我执行console.log(value)时,这就是我所得到的: enter image description here

所以它不仅仅是一个平面阵列,还有其他东西与它相关联。

以下是我使用它的方式:

  <tbody v-repeat="company in companies | filterBy searchText | orderBy 'name'">
    <tr>
      <td class="center aligned border" rowspan="@{{ company.applications.length }}" bgcolor="#F9FAFB"><a href="#"><strong>@{{ company.name }}</strong></a></td>
      <td><a href="#">@{{ company.applications[0] }}</a></td>
    </tr>
    <tr v-repeat="company.applications | removeIndex">
      <td><a href="#">@{{ $value }}</a></td>
    </tr>
  </tbody>

@标志,因为我在Laravel应用程序中使用它。

2 个答案:

答案 0 :(得分:0)

假设value是一个数组?

filters: {
    removeIndex: function(value) {
        return value.sort().slice(1);
    }
}

通过您可能想要提供自己的排序方法,因为默认排序方法是基于Unicode的实现:

filters: {
    removeIndex: function(value) {
        return value.sort(function(a,b) { // return -1,0,1 as required})
                    .slice(1);
    }
}

答案 1 :(得分:0)

这个问题确实是一个无限循环。我在Vue GitHub页面上发现了一个与我非常相似的问题:

https://github.com/yyx990803/vue/issues/1153

解决方案是首先对数组进行切片以创建副本,然后直接应用sort函数,如下所示:

return value.slice().sort().slice(1)