简体   繁体   English

我想基于两个属性对对象数组进行排序

[英]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: 你需要做的是三个检查:

  1. First test if (a.offerApplicable == 'FALSE' && b.offerApplicable == 'TRUE') then return 1 . 首先测试if (a.offerApplicable == 'FALSE' && b.offerApplicable == 'TRUE')然后返回1
  2. Then test if (a.offerApplicable == b.offerApplicable == 'TRUE') then return a.price > b.price . 然后测试if (a.offerApplicable == b.offerApplicable == 'TRUE')然后返回a.price > b.price
  3. Otherwise test if (a.offerApplicable == b.offerApplicable) then return a.price > b.price . 否则测试if (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 . 这将根据priceofferApplicable进行排序。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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