【问题标题】:Pass index to custom orderBy function将索引传递给自定义 orderBy 函数
【发布时间】:2015-08-01 14:46:46
【问题描述】:

这可能既简单又愚蠢,但我似乎无法弄清楚。我创建了一个 ng-repeat 结构,我在不同的对象上多次使用它。基本上,我遍历这些对象内的数组中的元素,并根据某些变量,我需要应用自定义 orderBy,或者将其保留为原始顺序。

所以我创建了这样的自定义 orderBy:

<li ng-repeat="tag in filter.tags | orderBy: customSort(filter.customSort)">

基本上,过滤器对象包含标签数组和一个布尔变量,用于说明是否需要应用自定义排序。在我的 customSort 函数中,我检查传递的参数是否为真并执行该自定义排序。但如果它是错误的 - 我似乎无法在该数组中以原始顺序输出标签。

我不能通过 $index 因为此时它始终为 0,它只会成为该 ng-repeat 标记内的索引。我不能这样做 filter.tags.indexOf(tag) 因为标签还不存在。

我有点卡住了,有没有办法有条件地申请 orderBy?

进一步说明: 我遍历一组标签并打印它们的本地化值,其中一些标签应该按照它们的原始顺序,有些应该在它们的本地化版本中按字母顺序排列。所以我剥离的自定义排序是这样的:

$scope.customSort = function(language) {          
    return function(tag) {
        return $scope.tags.[language][tag];
    }
}

【问题讨论】:

  • 应该不需要这个功能。显示一些示例数据和filter.customSort 的值以及customSort() 的作用。不完全清楚你要做什么
  • 在问题末尾添加了更多详细信息。
  • @pokrishka This 应该会有所帮助。
  • 只需将$index传递给函数$scope.customSort = function(language, $index),如果另一个为false则返回。
  • @Vidul 太好了,这似乎是我需要的。明天会试一试,由于某种原因,我昨天在谷歌上搜索几乎完全相同的标题时没有遇到这个线程。

标签: javascript arrays angularjs


【解决方案1】:

到目前为止,这是我想出的唯一解决方案,在我将此标记为正确之前,我会稍等片刻,看看是否有人回答更好。

我必须将整个数组以及用于确定是否需要原始顺序或自定义排序的布尔变量传递给排序函数,然后像这样使用 indexOf:

$scope.customSort = function(perform, tags, language) {
    return function(tag) {
        if (!perform) return tags.indexOf(tag);       
        return $scope.tags.[language][tag];
    }
}

【讨论】:

    猜你喜欢
    • 2015-11-13
    • 1970-01-01
    • 1970-01-01
    • 2020-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-25
    • 1970-01-01
    相关资源
    最近更新 更多