Javascript 如何基于重复值angularjs对数组进行排序

Javascript 如何基于重复值angularjs对数组进行排序,javascript,jquery,html,angularjs,Javascript,Jquery,Html,Angularjs,我有以下数据 var data = [ { "h_id" : "31", "city": "hill", }, { "h_id": "4", "city": "Bevery Hills", }, { "h_id": "5", "city": "New York", }, { "h_id": "31", "city": "New York", }, { "h_id": "5",

我有以下数据

  var data = [
   {
    "h_id"  : "31",
    "city": "hill",       
}, {
    "h_id": "4",
    "city": "Bevery Hills",     
}, {
    "h_id": "5",
    "city": "New York",    
}, {
    "h_id": "31",
    "city": "New York",   
}, {
    "h_id": "5",
    "city": "New York",   
}
];
我希望数据按“id”顺序排序,如下所示

  var data = [
   {
    "h_id"  : "31",
    "city": "hill",       
}, {
    "h_id": "31",
    "city": "Bevery Hills",     
}, {
    "h_id": "4",
    "city": "New York",    
}, {
    "h_id": "5",
    "city": "New York",   
}, {
    "h_id": "5",
    "city": "New York",   
}
];

我如何创建一个函数来根据上面的场景过滤id值呢?

您只需要在数组上用一个比较器函数调用
.sort
方法

var数据=[{
“h_id”:“31”,
“城市”:“小山”,
}, {
“h_id”:“4”,
“城市”:“贝弗里山”,
}, {
“h_id”:“5”,
“城市”:“纽约”,
}, {
“h_id”:“31”,
“城市”:“纽约”,
}, {
“h_id”:“5”,
“城市”:“纽约”,
}];
var sortedData=data.sort((a,b)=>b.h_id-a.h_id);

控制台日志(sortedData)您可以将自定义函数传递给JavaScript的方法:

var数据=[{
“h_id”:“31”,
“城市”:“小山”,
}, {
“h_id”:“4”,
“城市”:“贝弗里山”,
}, {
“h_id”:“5”,
“城市”:“纽约”,
}, {
“h_id”:“31”,
“城市”:“纽约”,
}, {
“h_id”:“5”,
“城市”:“纽约”,
}];
var result=data.sort(函数(a,b){
返回a.h_id.localeCompare(b.h_id);
});
控制台日志(结果)
方法对数组中的元素进行适当排序并返回数组。阅读更多关于它的信息

这就是你完成任务的方法

var数据=[
{
“h_id”:“31”,
“城市”:“小山”,
}, {
“h_id”:“4”,
“城市”:“贝弗里山”,
}, {
“h_id”:“5”,
“城市”:“纽约”,
}, {
“h_id”:“31”,
“城市”:“纽约”,
}, {
“h_id”:“5”,
“城市”:“纽约”,
}
];
数据排序(函数(a,b){
返回parseInt(b.h_id)-parseInt(a.h_id);
});

console.log(data)
您希望按字符串(而不是数字)排序,因此根据您的操作应执行以下操作:

var数据=[
{
“h_id”:“31”,
“城市”:“小山”,
}, {
“h_id”:“4”,
“城市”:“贝弗里山”,
}, {
“h_id”:“5”,
“城市”:“纽约”,
}, {
“h_id”:“31”,
“城市”:“纽约”,
}, {
“h_id”:“5”,
“城市”:“纽约”,
}
];
数据排序(函数(a,b){
if(a.h_idb.h_id){
返回1;
}
返回0;
});

控制台日志(数据)它既不是升序,也不是降序。你的确切要求是什么?我认为这不是一个有效的模式。如果要排序,排序“h_id”将类似于:31,31,5,5,4。我不认为在适当的地方分组是有意义的。您不能按此模式进行排序。如果有3条记录
h_id=5
,那么输出应该是什么?不需要
parseInt
,他会将这些数字按字母顺序作为字符串进行排序。例如,“4”之前的“31”在“5”之前的“31”我想OP不知道他想要什么排序,更不用说按字符串或整数排序了(你可以想象将这些数字按字符分割,并将它们视为区域:
3.1
4
5
)@AlekseySolovey——谢谢你指出这一点。更新代码!我想过滤像31,31,4,5,5这样的id,而不是像acednding或decenting一样,我想过滤像如果第一个id是31,我想在下一个对象中过滤31中的所有数据,那么下一个id 4意味着我想在4中的所有数据继续“4”应该在“5”之前这是一个错误的答案,因为您正在比较数字。我想筛选id,如31,31,4,5,5,而不是像acednding或decenting,我想筛选,如果第一个id是31,我希望所有数据都在31中,然后下一个id 4意味着我希望所有数据都在4中继续