[英]How to sort nested arrays in JS by number?
我想按薪水对嵌套数组进行排序,从薪水最高的人开始到薪水最低的人结束。 我不想t want to take into consideration the currency... I don
知道该怎么做...在此先感谢
Array
(
[0]=>Array
(
[firstName]=>John
[lastName]=>Doe
[age]=>35
[salary]=>Array
(
[gbp]=>"180"
[eur]=>“”
[usd]=>""
)
)
[1]=>Array
(
[firstName]=>Maria
[lastName]=>Anders
[age]=>26
[salary]=>Array
(
[gbp]=>""
[eur]=>"100"
[usd]=>""
)
)
[2]=>Array
(
[firstName]=>Thomas
[lastName]=>Hardy
[age]=>31
[salary]=>Array
(
[gbp]=>""
[eur]=>""
[usd]=>"224"
)
)
)
好像您发布了php。
无论如何,请看一下sort函数:
var numbers = [{ age: 10, salary: { gbp: 10, eur: 0, usd: 0 } }, { age: 2, salary: { gbp: 0, eur: 345, usd: 0 } }, { age: 100, salary: { gbp: 0, eur: 0, usd: 23 } }, { age: 50, salary: { gbp: 0, eur: 432, usd: 0 } }]; numbers.sort(function(a, b) { // Get the sum of salaries in the a object let aAmt = Object.values(a.salary).reduce((s, v) => s + v, 0) // Get the sum of salaries in the b object let bAmt = Object.values(b.salary).reduce((s, v) => s + v, 0) // Calculate the difference return bAmt - aAmt }) console.log(numbers);
我认为您发布的不是JS,但是如果您在JS中有类似类型的数组,则可以尝试使用以下内容
假设数组看起来像这样
var x = [['John', 'Doe', 35, [180,0,0]],['Maria','Anders',26,[0,100,0]],['Thomas','Hardy',31,[0,0,224]]]
然后您可以使用此
function sorty(a,b){
if(Math.max.apply(null, a[3]) > Math.max.apply(null, b[3])) return -1;
if(Math.max.apply(null, a[3]) < Math.max.apply(null, b[3])) return 1;
return 0
}
然后运行:
x.sort(sorty)
会给你这个:
0: (4) ["Thomas", "Hardy", 31, Array(3)]
1: (4) ["John", "Doe", 35, Array(3)]
2: (4) ["Maria", "Anders", 26, Array(3)]
我猜这是一个很棘手的解决方案。
虽然salary
对象中只有一个相关值,但可以采用逻辑OR ||
从中获取价值进行排序。 如果没有值是真实的 ,则为零。
在Array#sort
的回调中,采用两个值的差值, a - b
在b
之前排序较小a
b
。 如果要对降序进行排序,只需将操作数取反为b - a
。
var array = [{ firstName: "John", lastName: "Doe", age: 35, salary: { gbp: "180", eur: "", usd: "" } }, { firstName: "Maria", lastName: "Anders", age: 26, salary: { gbp: "", eur: "100", usd: "" } }, { firstName: "Thomas", lastName: "Hardy", age: 31, salary: { gbp: "", eur: "", usd: "224" } }]; array.sort(function (a, b) { var aa = a.salary.gbp || a.salary.eur || a.salary.usd || 0, bb = b.salary.gbp || b.salary.eur || b.salary.usd || 0; return bb - aa; }); console.log(array);
.as-console-wrapper { max-height: 100% !important; top: 0; }
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.