[英]I want to sort an array of objects based on two properties
I want to sort an array of of objects in JavaScript with Two properties Boolean value and Int value.I want want Output like this : 我想在JavaScript中使用两个属性布尔值和Int值对一组对象进行排序。我想要像这样输出:
{ 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}
All object with true values are first also sorted with price and then all object having boolean value as false. 具有真值的所有对象首先也按价格排序,然后所有具有布尔值的对象为false。 i am able to sort them by boolean value but i want to sort them by price as well.
我能够按布尔值对它们进行排序,但我也希望按价格对它们进行排序。
i have tried this 我试过这个
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));
please help thanks in advance. 请提前帮助谢谢。
try this compare function 试试这个比较功能
function compare(a,b) {
if (a.offerApplicable == b.offerApplicable)
return (a.price > b.price)
else return (a.offerApplicable < b.offerApplicable)
}
What you need is to make three checks: 你需要做的是三个检查:
(a.offerApplicable == 'FALSE' && b.offerApplicable == 'TRUE')
then return 1
. (a.offerApplicable == 'FALSE' && b.offerApplicable == 'TRUE')
然后返回1
。 (a.offerApplicable == b.offerApplicable == 'TRUE')
then return a.price > b.price
. (a.offerApplicable == b.offerApplicable == 'TRUE')
然后返回a.price > b.price
。 (a.offerApplicable == b.offerApplicable)
then return a.price > b.price
. (a.offerApplicable == b.offerApplicable)
然后返回a.price > b.price
。 This is how should be your code: 这是你的代码应该如何:
objs.sort(function compare(a,b) {
if (a.offerApplicable == 'FALSE' && b.offerApplicable == 'TRUE')
return 1;
else if(a.offerApplicable == b.offerApplicable == 'TRUE')
return a.price > b.price
else if(a.offerApplicable == b.offerApplicable)
return a.price > b.price
});
Demo: 演示:
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 } ]; console.log(objs.sort(function compare(a,b) { if (a.offerApplicable == 'FALSE' && b.offerApplicable == 'TRUE') return 1; else if(a.offerApplicable == b.offerApplicable == 'TRUE') return a.price > b.price else if(a.offerApplicable == b.offerApplicable) return a.price > b.price }));
This will sort upon offerApplicable
then upon price
. 这将根据
price
对offerApplicable
进行排序。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.