簡體   English   中英

我想基於兩個屬性對對象數組進行排序

[英]I want to sort an array of objects based on two properties

我想在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}

具有真值的所有對象首先也按價格排序,然后所有具有布爾值的對象為false。 我能夠按布爾值對它們進行排序,但我也希望按價格對它們進行排序。

我試過這個

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));

請提前幫助謝謝。

試試這個比較功能

function compare(a,b) {
  if (a.offerApplicable == b.offerApplicable)
    return (a.price > b.price)
  else return (a.offerApplicable < b.offerApplicable)
}

你需要做的是三個檢查:

  1. 首先測試if (a.offerApplicable == 'FALSE' && b.offerApplicable == 'TRUE')然后返回1
  2. 然后測試if (a.offerApplicable == b.offerApplicable == 'TRUE')然后返回a.price > b.price
  3. 否則測試if (a.offerApplicable == b.offerApplicable)然后返回a.price > b.price

這是你的代碼應該如何:

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
});

演示:

 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 })); 

這將根據priceofferApplicable進行排序。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM