繁体   English   中英

如何按编号对JS中的嵌套数组进行排序?

[英]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 - bb之前排序较小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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM