Javascript 按年龄组排序数组,然后按性别排序

标签 javascript arrays sorting

我正在尝试根据年龄组对数组进行排序,然后是性别。我想出了一个解决方案,并且有效,但我认为代码可以沿线某处进行改进,但我不知道如何改进。这是示例输入:

// removed

我的代码:

// removed code 

我得到的输出是正确的:

male 2,0,0,0,1,0,0,0,0
female 0,0,0,1,3,1,0,0,0

我很确定在速度性能方面有更好的方法可以实现这一点。有任何想法吗?

最佳答案

您可以使用 array#reduce .

var obj = [[{"age":41,"gender":"male"}],[{"age":10,"gender":"male"}],[{"age":10,"gender":"male"}],[{"age":31,"gender":"female"}],[{"age":58,"gender":"female"}],[{"age":50,"gender":"female"}],[{"age":50,"gender":"female"}],[{"age":50,"gender":"female"}]];

var result = obj.reduce(function(data,a){
  ++data[a[0]['gender']][a[0]['age'] > 80 ? data[a[0]['gender']].length : Math.ceil(a[0]['age'] / 10 - 1)];
  return data;
},{'male' : Array(9).fill(0), 'female' : Array(9).fill(0)});

console.log(result);

如果要对对象进行排序,可以使用自定义排序函数

var obj = [[{"age":41,"gender":"male"}],[{"age":10,"gender":"male"}],[{"age":10,"gender":"male"}],[{"age":31,"gender":"female"}],[{"age":58,"gender":"female"}],[{"age":50,"gender":"female"}],[{"age":50,"gender":"female"}],[{"age":50,"gender":"male"}],[{"age":50,"gender":"female"}]]

var result = obj.sort(function(a,b){
    return a[0].age - b[0].age || a[0].gender.localeCompare(b[0].gender);
});

console.log(result);

关于Javascript 按年龄组排序数组,然后按性别排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45529558/

相关文章:

javascript - 带过渡的线性/增量旋转动画

c - 指针访问和数组访问之间的值差异

javascript - 禁用 Angular 2 中的行

javascript - 如何在 Highcharts 中动态设置新数据?

javascript - 为什么我的 jQuery empty 不起作用?

Java:字符串数组;尝试将字符串作为代码执行

php - 我是否破坏了以下处理 3 种(人类)语言的 php 数组中的任何 "php good practice"?

r - 如何在 geom_point 点图中仅显示前 10 个类别和值?

python - 用另一个列表对元组列表进行排序

java - 为什么插入排序只有在我们使用 while 作为内循环时才起作用,而对“for 循环”不起作用?