简体   繁体   English

按值对 JSON 对象进行排序的函数

[英]Function to sort a JSON object by value

Example of the JSON I'm trying to sort:我正在尝试排序的 JSON 示例:

{
  "auctions": [{
        "uuid": "533cbc92429c4456b2c013607eed5c38",
        "auctioneer": "5ba9f43481854fe891f94dfbd771b065",
        "profile_id": "4bec273ae4fa4ebd80169b734d0702bc",
        "coop": ["5ba9f43481854fe891f94dfbd771b065"],
        "start": 1600978137016,
        "end": 1600999737016,
        "item_name": "Hologram",
        "item_lore": "§8Furniture\n§8Colored\n\n§7Add some flare to your island\n§7with custom floating text!\n\n§6§lLEGENDARY",
        "extra": "Hologram Skull Item",
        "category": "misc",
        "tier": "LEGENDARY",
        "starting_bid": 300000,
        "item_bytes": "H4sIAAAAAAAAAE1Ry26bQBS9dtIG01b5gkpUyhYFbAOmUheWTQKWAcfPmE01mIGMMwMWDE3wP/Q7vO03+MOqTtpNV1f3nHPPfckAHWgRGQBabWiTpPWzBe9GRZ3zlgwXHGUX0HFJgu8oyiqh+i2DvHiuKQ1fclxK0PYSuNGsLsYxMlUr1W21Z5qGag+6qYoslMZmjLAV66JuVhYHXHKCqw5IHL/yusTV39YSvFsjWmP4hZuJFj0+acnjhO4azxT5cqHR0NsfLC9fN/HIMz0meHdoThv7P63B0cag297kKcof6pittWlvTrE713ds9SMcJzRazmkwzoxg4xjbY0T9/cPR/xe7wX69D5bbYzj2ej5zjhFb0+3GN4Llqh+OJyzaPzfbzero7x1dxF5EJnb6qH0T08twlZDqQFHTgctpUWJJgFfw8Xwa3NVlTt7WBFlko4IKNhGscj5ZwyRRqoJhJaWoxAovlKaoS4VUFOUJfBaKF8KflF1d8YIJUYE4yTPl7W5fhMX1+WSeT3Tq3DvBeDjfSnAZIIbhg8Bd0SgrEROjXTuvvERDzksS1xxXEnSKkmQkX6IMPi3ccPZ9tpqP3OHCkd7+D5IbTsP7+dAXhnUtgBsztZHdTRM11nWk9gcWVm1s9NXdzhzocZrEtqEJW04YrjhiB7i2b7v9266m9L9qA2XmA7Th/RgxlGG4APgDfkDxxHQCAAA=",
        "claimed": false,
        "claimed_bidders": [],
        "highest_bid_amount": 0,
        "bin": true,
        "bids": []
    }, {
        "uuid": "4803a8c0e1674dfb9bf7581975d6181f",
        "auctioneer": "aa277b630ed94690905b955024e4ae21",
        "profile_id": "16df394a108042a18c32a57684369aac",
        "coop": ["b00fc41206a74e5886767298081ff151", "aa277b630ed94690905b955024e4ae21", "ab8012ba98fa46d994e393406a0cccd5", "9680e1dd20aa4e01b0bb79e6413983fe"],
        "start": 1600977772109,
        "end": 1600999372109,
        "item_name": "Hologram",
        "item_lore": "§8Furniture\n§8Colored\n\n§7Add some flare to your island\n§7with custom floating text!\n\n§6§lLEGENDÄR",
        "extra": "Hologram Skull Item",
        "category": "misc",
        "tier": "LEGENDARY",
        "starting_bid": 399999,
        "item_bytes": "H4sIAAAAAAAAAE1Ry26bQBS9dpIG01b5gkpUyhYFPwATqQvLJgHLgOO32VSDGZNxZsCCoQled9vv8Lbf4P5X1XG76erqnnPuuS8ZoAE1IgNArQ51Etd+1OCqn5Upr8lwwVFyAQ2HxPiBoqQQqt8yyNOXktLgNcW5BHU3hlvNbGEcIUM1t01LbRuGrlrd1lZFJtpGRoSwGTVF3TjP9jjnBBcNkDh+42WOi7+tJbhaIFpi+ImroRaunrV4NaSbyjVEPptqNHB3e9NNF1XUdw2XCd7pGaPK+k+rc7TU6bo9fA7TpzJiC23UnlDsTJobNv8WDGIazibUHyS6v7T19SGk3u7p4P2LLX+32Pmz9SEYuG2P2YeQLeh66en+bN4JBkMW7l6q9XJ+8HZ2U8R2SIbWdqV9EdPLcB2TYk9R1YDLUZZjSYDX8OF07D6UeUrOa4Issn5GBRsLVjkdzV4cK0XGsLKlKMcKz5QqK3OFFBSlMXwSilfCn5VNWfCMCVGGOEkT5Xy3z8Li5nQ0Tkc6sh9tf/Dr+0SCSx8xDO8F7ohGSY6YGO3GfuM56nGek6jkuJCgkeUkIekMJfBx6gTjr+P5pO/0prZ0/j9ITjAKHic9TxiWpQBuo2gTd40mUg1L19WO0cVq1zQ0FVmmrnXwdmO1TGHLCcMFR2wPN9Zdq3PX0pTOvdZUxh5AHd4NEEMJhguAPwiTikl0AgAA",
        "claimed": false,
        "claimed_bidders": [],
        "highest_bid_amount": 0,
        "bin": true,
        "bids": []
    }
}

I would like to sort the objects from lowest to highest using the "starting_bid" key's value.我想使用"starting_bid"键的值从低到高对对象进行排序。 Is this possible?这可能吗? From my research I heard I had to convert the data to an array to search from it, is there a way to do that (since the JSON object came from an API request).从我的研究中,我听说我必须将数据转换为数组才能从中搜索,有没有办法做到这一点(因为 JSON 对象来自 API 请求)。 Also, is it possible to make the 'sorting algorithm' into a function?另外,是否可以将“排序算法”变成一个函数? I'm happy to give any info you need.我很乐意提供您需要的任何信息。

Edit: Attempted Solutions (so far): Solution 1 (Didn't Work)编辑:尝试的解决方案(到目前为止):解决方案 1(不起作用)

function sortByValue(data) {
     const sortable = Object.entries(data)
       .sort(([, a], [, b]) => a - b)
       .reduce((r, [k, v]) => ({ ...r, [k]: v }), {});
}

Solution 2 (Thanks Besufkad Menji) (Worked):解决方案 2(感谢 Besufkad Menji)(有效):

function sortByValue(data) {
     data.auctions.sort((a, b)=>a.starting_bid - b.starting_bid);
     return data;
}

from lowest to highest:从低到高:

myJson.auctions.sort((a,b)=>a.starting_bid-b.starting_bid)

from highest to lowest:从高到低:

myJson.auctions.sort((a,b)=>b.starting_bid-a.starting_bid)

Live demo here现场演示在这里

const  input = ...
let output = input.auctions.sort( (a,b) => a.starting_bid -b.starting_bid > 0);

您可以使用排序 =D

const sort = a['auctions'].sort((a,b) => a['starting_bid'] - b['starting_bid'])

You can do that:你可以这样做:

var array=[],obj={
      caffeineoverdose:'2517',
      workhardplayhard:'761277',
      familia:'4633452'
  };
  for(a in obj){
      array.push([a,obj[a]])
  }
  array.sort(function(a,b){return a[1] - b[1]});
  array.reverse();

Demo演示

Here's what I would do:这是我会做的:

 const json = { "auctions": [{ "uuid": "533cbc92429c4456b2c013607eed5c38", "auctioneer": "5ba9f43481854fe891f94dfbd771b065", "profile_id": "4bec273ae4fa4ebd80169b734d0702bc", "coop": ["5ba9f43481854fe891f94dfbd771b065"], "start": 1600978137016, "end": 1600999737016, "item_name": "Hologram", "item_lore": "§8Furniture\\n§8Colored\\n\\n§7Add some flare to your island\\n§7with custom floating text!\\n\\n§6§lLEGENDARY", "extra": "Hologram Skull Item", "category": "misc", "tier": "LEGENDARY", "starting_bid": 300000, "item_bytes": "H4sIAAAAAAAAAE1Ry26bQBS9dtIG01b5gkpUyhYFbAOmUheWTQKWAcfPmE01mIGMMwMWDE3wP/Q7vO03+MOqTtpNV1f3nHPPfckAHWgRGQBabWiTpPWzBe9GRZ3zlgwXHGUX0HFJgu8oyiqh+i2DvHiuKQ1fclxK0PYSuNGsLsYxMlUr1W21Z5qGag+6qYoslMZmjLAV66JuVhYHXHKCqw5IHL/yusTV39YSvFsjWmP4hZuJFj0+acnjhO4azxT5cqHR0NsfLC9fN/HIMz0meHdoThv7P63B0cag297kKcof6pittWlvTrE713ds9SMcJzRazmkwzoxg4xjbY0T9/cPR/xe7wX69D5bbYzj2ej5zjhFb0+3GN4Llqh+OJyzaPzfbzero7x1dxF5EJnb6qH0T08twlZDqQFHTgctpUWJJgFfw8Xwa3NVlTt7WBFlko4IKNhGscj5ZwyRRqoJhJaWoxAovlKaoS4VUFOUJfBaKF8KflF1d8YIJUYE4yTPl7W5fhMX1+WSeT3Tq3DvBeDjfSnAZIIbhg8Bd0SgrEROjXTuvvERDzksS1xxXEnSKkmQkX6IMPi3ccPZ9tpqP3OHCkd7+D5IbTsP7+dAXhnUtgBsztZHdTRM11nWk9gcWVm1s9NXdzhzocZrEtqEJW04YrjhiB7i2b7v9266m9L9qA2XmA7Th/RgxlGG4APgDfkDxxHQCAAA=", "claimed": false, "claimed_bidders": [], "highest_bid_amount": 0, "bin": true, "bids": [] }, { "uuid": "4803a8c0e1674dfb9bf7581975d6181f", "auctioneer": "aa277b630ed94690905b955024e4ae21", "profile_id": "16df394a108042a18c32a57684369aac", "coop": ["b00fc41206a74e5886767298081ff151", "aa277b630ed94690905b955024e4ae21", "ab8012ba98fa46d994e393406a0cccd5", "9680e1dd20aa4e01b0bb79e6413983fe"], "start": 1600977772109, "end": 1600999372109, "item_name": "Hologram", "item_lore": "§8Furniture\\n§8Colored\\n\\n§7Add some flare to your island\\n§7with custom floating text!\\n\\n§6§lLEGENDÄR", "extra": "Hologram Skull Item", "category": "misc", "tier": "LEGENDARY", "starting_bid": 399999, "item_bytes": "H4sIAAAAAAAAAE1Ry26bQBS9dpIG01b5gkpUyhYFPwATqQvLJgHLgOO32VSDGZNxZsCCoQled9vv8Lbf4P5X1XG76erqnnPuuS8ZoAE1IgNArQ51Etd+1OCqn5Upr8lwwVFyAQ2HxPiBoqQQqt8yyNOXktLgNcW5BHU3hlvNbGEcIUM1t01LbRuGrlrd1lZFJtpGRoSwGTVF3TjP9jjnBBcNkDh+42WOi7+tJbhaIFpi+ImroRaunrV4NaSbyjVEPptqNHB3e9NNF1XUdw2XCd7pGaPK+k+rc7TU6bo9fA7TpzJiC23UnlDsTJobNv8WDGIazibUHyS6v7T19SGk3u7p4P2LLX+32Pmz9SEYuG2P2YeQLeh66en+bN4JBkMW7l6q9XJ+8HZ2U8R2SIbWdqV9EdPLcB2TYk9R1YDLUZZjSYDX8OF07D6UeUrOa4Issn5GBRsLVjkdzV4cK0XGsLKlKMcKz5QqK3OFFBSlMXwSilfCn5VNWfCMCVGGOEkT5Xy3z8Li5nQ0Tkc6sh9tf/Dr+0SCSx8xDO8F7ohGSY6YGO3GfuM56nGek6jkuJCgkeUkIekMJfBx6gTjr+P5pO/0prZ0/j9ITjAKHic9TxiWpQBuo2gTd40mUg1L19WO0cVq1zQ0FVmmrnXwdmO1TGHLCcMFR2wPN9Zdq3PX0pTOvdZUxh5AHd4NEEMJhguAPwiTikl0AgAA", "claimed": false, "claimed_bidders": [], "highest_bid_amount": 0, "bin": true, "bids": [] }] } function asc(){ const s = json.auctions.slice(); return s.sort((a, b)=>a.starting_bid-b.starting_bid); } function desc(){ const s = json.auctions.slice(); return s.sort((a, b)=>b.starting_bid-a.starting_bid); } console.log('asc'); console.log(asc()); console.log('desc'); console.log(desc()); // original unchanged because of slices console.log('original'); console.log(json);

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

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