簡體   English   中英

按特定的字符串順序對對象的Javascript數組排序?

[英]Sorting Javascript array of objects by specific string order?

我有以下數據:

在此處輸入圖片說明

我想知道如何按特定順序對它們進行排序。

順序需要為: 黃色,藍色,白色,綠色,紅色 ,然后在這些顏色內,它將首先顯示最小的數字。

因此,在這種情況下,正確的排序應為:y2,y3,b0,b2,b6,w2,g7,r4

是否有人對如何實現這一目標有任何想法? 我正在使用underscore.js,如果這樣做更容易。

天真地假設所有元素都具有有效的顏色(或者至少它首先對具有無效顏色的元素進行排序):

arr.sort( ( a, b ) => {
    const colorOrder = ['yellow', 'blue', 'white', 'green', 'red'];

    const aColorIndex = colorOrder.indexOf( a.color );
    const bColorIndex = colorOrder.indexOf( b.color );

    if ( aColorIndex === bColorIndex )
        return a.card - b.card;

    return aColorIndex - bColorIndex;
} );

例:

const sorted = [
    { color: 'yellow', card: '3' },
    { color: 'red',    card: '4' },
    { color: 'blue',   card: '6' },
    { color: 'white',  card: '2' },
    { color: 'blue',   card: '2' },
    { color: 'yellow', card: '2' },
    { color: 'blue',   card: '0' },
    { color: 'green',  card: '7' },
].sort( ( a, b ) => {
    const colorOrder = ['yellow', 'blue', 'white', 'green', 'red'];

    const aColorIndex = colorOrder.indexOf( a.color );
    const bColorIndex = colorOrder.indexOf( b.color );

    if ( aColorIndex === bColorIndex )
        return a.card - b.card;

    return aColorIndex - bColorIndex;
} );

// Result:
[
  { "color": "yellow", "card": "2" },
  { "color": "yellow", "card": "3" },
  { "color": "blue",   "card": "0" },
  { "color": "blue",   "card": "2" },
  { "color": "blue",   "card": "6" },
  { "color": "white",  "card": "2" },
  { "color": "green",  "card": "7" },
  { "color": "red",    "card": "4" }
]

您可以簡單地將Array.prototype.sort與自定義排序邏輯一起使用:

 var arr = [ { color: "yellow", card: "3" }, { color: "red", card: "4" }, { color: "blue", card: "6" }, { color: "white", card: "2" }, { color: "blue", card: "2" }, { color: "yellow", card: "2" }, { color: "blue", card: "0" }, { color: "green", card: "7" } ]; var arrSorted = arr.sort(function(a, b) { var colorsOrder = ["yellow", "blue", "white", "green", "red"]; function getColorIndex(x) { return colorsOrder.indexOf(x.color); } return (getColorIndex(a) - getColorIndex(b)) || (a.card - b.card); }); console.log(arrSorted); 

暫無
暫無

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

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