Javascript 按嵌套属性排列的角度顺序可能缺失?

Javascript 按嵌套属性排列的角度顺序可能缺失?,javascript,angularjs,sorting,Javascript,Angularjs,Sorting,我有一个包含项目的列表,正如您在plunkr中看到的,我正在尝试使用标准的orderByfilter对表进行排序: <tr ng-repeat="item in list | orderBy: sorting.field : sorting.reverse"> <!-- some code goes here --> </tr> 安古拉斯普朗克 身份证件 标题 喜欢 分享 评论 {{item.id} {{item.title} {{item.re

我有一个包含项目的列表,正如您在plunkr中看到的,我正在尝试使用标准的
orderBy
filter对表进行排序:

<tr ng-repeat="item in list | orderBy: sorting.field : sorting.reverse">
     <!-- some code goes here -->
</tr>

安古拉斯普朗克
身份证件
标题
喜欢
分享
评论
{{item.id}
{{item.title}
{{item.reactions.like}
{{item.reactions.share}
{{item.reactions.comment}
*单击表格标题以对结果进行排序


您可以做的最常见的事情是

<td>
 <span ng-if="item.reactions.comment">{{item.reactions.comment}}</span>
 <span ng-if="!item.reactions.comment">Zero</span>
</td>

{{item.reactions.comment}
零

如果您找到了更精确的方法,请在此处更新。

您应该在显示数据之前修复数据,而不是通过排序(您可以应用)

var possibleReactions = ['like', 'share', 'comment'];
for (var i = 0; i < $scope.list.length; i++) {
  var item = $scope.list[i];
  for (var j = 0; j < possibleReactions.length; j++) {
    var reaction = possibleReactions[j];
    if(!item.reactions[reaction]) item.reactions[reaction] = 0;
  }
}
var-possibleReactions=['like','share','comment'];
对于(变量i=0;i<$scope.list.length;i++){
var item=$scope.list[i];
对于(var j=0;j
查看下面的工作代码段

var-app=angular.module('plunker',[]);
应用程序控制器('MainCtrl',函数($scope){
$scope.list=[{
id:1,
标题:“测试1”,
反应:{
“喜欢”:7,
"份数":20,,
评论:100
}
}, {
id:2,
标题:“测试2”,
反应:{
“like”:5,
"分享":10,,
}
}, {
id:3,
标题:“测试3”,
反应:{
"like":4,,
"分享":1,,
}
}, {
id:4,
标题:“测试4”,
反应:{
"like":4,,
"分享":1,,
评论:2
}
}];
var possibleReactions=['like','share','comment'];
对于(变量i=0;i<$scope.list.length;i++){
var item=$scope.list[i];
对于(var j=0;j

安古拉斯普朗克
身份证件
标题
喜欢
分享
评论
{{item.id}
{{item.title}
{{item.reactions.like}
{{item.reactions.share}
{{item.reactions.comment}
*单击表格标题以对结果进行排序


创建自己的过滤器

angular
.module("app", [])
.controller("c", function ($scope) {
    $scope.items = [
        {id: 1, name: ""},
        {id: 2, name: "a"},
        {id: 3, name: "b"},
        {id: 4, name: "c"},
        {id: 5, name: ""},
        {id: 6, name: "f"},
        {id: 7, name: ""},
        {id: 8, name: "z"},
    ];
})
.filter("emptyToEnd", function () {
    return function (array, key) {
        var present = array.filter(function (item) {
            return item[key];
        });
        var empty = array.filter(function (item) {
            return !item[key]
        });
        return present.concat(empty);
    };
});

angular.bootstrap(document, ["app"]);

请参见工作示例

您期望得到什么?如果没有注释,是否应将其视为
0
,并在排序asc时显示在开头?为什么不能在将这些值分配给作用域之前修复它们?在咖啡中,items
中的item将为
item.comments?=0。这并不能解决按此值排序的问题。而且,这样做会容易得多。
{{item.reactions.comments | | 0}