【发布时间】:2017-06-22 11:45:39
【问题描述】:
我想用两个属性布尔值和 Int 值对 JavaScript 中的对象数组进行排序。我想要这样的输出:
{ first_nom: 'sumeet', last_nom: 'Prentice' ,offerApplicable: 'TRUE' ,price: 40},
4:55 PM { first_nom: 'Pirate', last_nom: 'Prentice' ,offerApplicable: 'TRUE' ,price: 50},
4:55 PM { first_nom: 'Lazslo', last_nom: 'Jamf' ,offerApplicable: 'TRUE' ,price: 60 },
4:55 PM { first_nom: 'jitendra', last_nom: 'Prentice' ,offerApplicable: 'TRUE' ,price: 101}
所有具有真值的对象首先也按价格排序,然后所有具有布尔值的对象为假。我可以按布尔值对它们进行排序,但我也想按价格对它们进行排序。
我试过了
var objs = [
{ first_nom: 'Lazslo', last_nom: 'Jamf' ,offerApplicable: 'TRUE' ,price: 60 },
{ first_nom: 'Pig', last_nom: 'Bodine' , offerApplicable: 'FALSE' ,price: 100},
{ first_nom: 'Pirate', last_nom: 'Prentice' ,offerApplicable: 'TRUE' ,price: 50},
{ first_nom: 'nithesh', last_nom: 'Bodine' , offerApplicable: 'FALSE' ,price: 40},
{ first_nom: 'sumeet', last_nom: 'Prentice' ,offerApplicable: 'TRUE' ,price: 40},
{ first_nom: 'mahesh', last_nom: 'Bodine' , offerApplicable: 'FALSE' ,price: 40},
{ first_nom: 'jitendra', last_nom: 'Prentice' ,offerApplicable: 'TRUE' ,price: 101}
];
function compare(a,b) {
var aConcat = a["offerApplicable"] + a["price"];
var bConcat = b["offerApplicable"] + b["price"];
if (aConcat < bConcat )
return 1;
if (aConcat > bConcat )
return -1;
return 0;
}`enter code here`
console.log(objs.sort(compare));
请帮助提前谢谢。
【问题讨论】:
-
你认为
'TRUE' + 60的结果究竟是什么? -
@UnholySheep 我认为他理解正确(几乎)。他认为将价格连接到“offerApplicable”将使他首先按 TRUE/FALSE 排序,然后再按价格排序。他出错的地方是,虽然 TRUE/FALSE 在技术上将首先被“排序”,但剩余的价格被排序/比较为一个字符串,而不是一个数值,例如
'60' > '400' === true.
标签: javascript arrays sorting