javascript - 将索引传递给自定义 orderBy 函数

标签 javascript arrays angularjs

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

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

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

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

我不能传递 $index 因为那时它总是 0,它只会成为 ng-repeat 标签内的索引。我不能做那样的事情 filter.tags.indexOf(tag) 因为标签还不存在。

我有点卡住了,有没有办法有条件地应用 orderBy?

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

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

最佳答案

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

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

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

关于javascript - 将索引传递给自定义 orderBy 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31763088/

相关文章:

javascript - 解码或转义字符串中的十六进制代码数字

javascript - 从 ajax json 请求,如何动态地将对象添加到数组中以便我可以循环遍历它们?

java - 使用嵌套数组显示和计算质因数或其他运算的数量

javascript - 在指令内部的 Controller 之间交换信息

JavaScript:如何检查 "HTMLUnknownElement"?

javascript - 另一个对象内的整数对象属性也具有整数属性

angularjs - 以 Angular 方式设置元素焦点

javascript - 解析器函数不会被调用以更改输入文本框

Javascript 在评估所有参数之前返回结果?

javascript - 如何将数字添加到数组名称中