我想按工资开头用嵌套数组排序
获得最高工资的人
以收到最低者的人结束
一。我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"
)
)
)
答案 0 :(得分:1)
看起来你发布了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);
答案 1 :(得分:1)
我不认为你发布的是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)]
我猜是一种黑客解决方案。
答案 2 :(得分:0)
虽然salary
对象中只有一个相关值,但您可以使用logical OR ||
从中获取值以进行排序。如果没有值truthy,则采用零。
在Array#sort
的回调中,取两个值的增量,a - 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; }