过滤以对JSON数据的角度js进行排序

Pra*_*inz 5 arrays sorting json angularjs angularjs-filter

我是角度js的新手,并且基本了解过滤器如何在角度js中工作.我很难对我的jSON数据数组进行排序,因为它有各种参数需要对它进行排序.

我的JSON数组采用以下格式:

[
  {
     type:0,
     emp_name:"xyz",
     connected_on:"9876543210"
  },
  {
     type:1,
     emp_name:"",
     connected_on:"9876543210"
  },
  {
     type:1,
     emp_name:"abcd",
     connected_on:"9876543210"
  },
  {
     type:0,
     emp_name:"pqr",
     connected_on:"9876543210"
  }
]
Run Code Online (Sandbox Code Playgroud)

同一阵列的其他组合可以是:

[
  {
     type:0,
     emp_name:"",
     connected_on:"9876543210"
  },
  {
     type:1,
     emp_name:"xyz",
     connected_on:"9876543210"
  },
  {
     type:0,
     emp_name:"abcd",
     connected_on:"9876543210"
  }
]
Run Code Online (Sandbox Code Playgroud)

每个数组都有任何一个对象,其中 type:1,将在那里,在排序之后它必须始终是第一个元素.

之后,排序后的数组应该包含emp_name:""的所有元素.

在排序数组的最后,它应该包含根据emp_name排序的所有剩余元素:"无论名称"

所以结果应该如下所示:

[
  {
     type:1,
     emp_name:"xyz",
     connected_on:"9876543210"
  },
  {
     type:0,
     emp_name:"",
     connected_on:"9876543210"
  },
  {
     type:0,
     emp_name:"abcd",
     connected_on:"9876543210"
  }
]
Run Code Online (Sandbox Code Playgroud)

任何人都可以帮我写过滤器以获得所需的结果.谢谢.如果需要任何其他信息,请告诉我.

此外,connected_on是唯一值,因此我使用JSONarr.connected_on跟踪

Raj*_*esh 2

排序函数期望-1, 0,-1作为结果。-1表示之前,0表示没有变化,1表示之后。

现在您必须根据 2 个参数进行排序,因此最好有一个算术值。根据优先级具有更高的价值。所以在下面的情况下,我们必须先基于 排序type,然后基于 排序emp_name

要按升序排序,请返回 1(表示较大)和 -1(表示较小)。对于降序反转的值。现在将这两个键组合起来,您将得到如下所示的结果:

var data=[{type:0,emp_name:"xyz",connected_on:"9876543210"},{type:1,emp_name:"",connected_on:"9876543210"},{type:1,emp_name:"abcd",connected_on:"9876543210"},{type:0,emp_name:"pqr",connected_on:"9876543210"}];

data.sort(function(a, b) {
  var _a = a.type > b.type ? -10 : a.type < b.type ? 10 : 0;
  var _b = a.emp_name > b.emp_name ? 1 : a.emp_name < b.emp_name ? -1 : 0;
  return _a + _b;
});
console.log(data)
Run Code Online (Sandbox Code Playgroud)