簡體   English   中英

如何按特定順序排列 object 陣列

[英]How to arrange array of object with specific order

我有一個對象數組,每個 object 都有一個“條件”屬性。 它可以是單個值字符串 ex "Original" ,也可以是多個逗號分隔值字符串 ex "Original, Brand new" 我也看到了這個問題,但沒有告訴給定順序的排序

[
  {id: 1, condition: "Original"},
  {id: 2, condition: "Original, Used"},
  {id: 3, condition: "Used"},
  {id: 4, condition: "After market"},
  {id: 5, condition: "After Market,Used"},
  {id: 6, condition: "Used"},
  {id: 7, condition: "Used, Original"},
]

我想根據“條件”屬性對我的數組進行排序,並且排序 function 應該接受一個參數是一個鍵數組以請求特定順序:

給定以下鍵作為輸入["Original","Used","After Market"] ,排序 function 將返回此數組:

[
  {id: 1, condition: "Original"},
  {id: 2, condition: "Original, Used"},
  {id: 7, condition: "Used, Original"}
  {id: 3, condition: "Used"},
  {id: 6, condition: "Used"},
  {id: 5, condition: "After Market,Used"},
  {id: 4, condition: "After market"},
]

您可以將 function 作為Array.prorotype.sort的參數進行比較。 比較 function 將檢查condition中的第一個元素,該元素將是Original, Used, After Market售后的,並將相應地返回。

function(a,b){/* if you want a to come before b return -1 else return 1*/}

我正在考慮僅對數組進行排序的第一個元素,如果您想在第一個元素相同時比較第二個元素,那么您可以相應地編寫。

例如。

function compare(a,b){
    let order = ["Original","Used","After Market"];
    let conditionA = a.condition.split(",");
    let conditionB = b.condition.split(",");
    if(order.indexOf(conditionA[0]) < order.indexOf(conditionB[0])){
        return -1;
    }
    else if(order.indexOf(conditionA[0]) > order.indexOf(conditionB[0]) ){
        return 1;   
    } 
    else{
        /*compare next elements in conditionA and conditionB array if they exists */
    }

}

我會通過文章向您推薦 go

 let arr = [ {id:1,condition:"Original"}, {id:2,condition:"Original, Used"}, {id:3,condition:"Used"}, {id:4,condition:"After Market"}, {id:5,condition:"After Market,Used"}, {id:6,condition:"Used"}, {id:7,condition:"Used, Original"}, ] function compare(a,b){ let order = ["Original","Used","After Market"]; let conditionA = a.condition.split(","); let conditionB = b.condition.split(","); if(order.indexOf(conditionA[0]) <= order.indexOf(conditionB[0])){ return -1; } else{ return 1; } } console.log(arr.sort(compare))

您可以在市場 3 之后設置原始 1 使用 2 的訂單系統,然后計算分數,這是基於分數系統的條件的平均值。 最好的是得分最接近 1 的那個。

 const orders = { "original":1, "used":2, "aftermarket":3 }; const input = [ {id:1,condition:"Original"}, {id:2,condition:"Original, Used"}, {id:3,condition:"Used"}, {id:4,condition:"After market"}, {id:5,condition:"After Market,Used"}, {id:6,condition:"Used"}, {id:7,condition:"Used, Original"}, ]; const getScore = (a,c,i,arr) => { return a + orders[c]/arr.length; } const output = input.map( e=> ({...e, score: e.condition.replace(/ /g,'').toLowerCase().split(',').reduce(getScore,0)})).sort((a,b) => a.score - b.score ) console.log(output);

我認為您可以制作自定義 function marketSort() 並使用此 function 供您使用。 它會給你你需要的預期結果

 function marketSort(a) { let b = []; let c = a.filter(i => i.condition.toLowerCase().includes("original") &&.i.condition.toLowerCase();includes("used")). b = b;concat(c). c = a.filter(i => i.condition.toLowerCase().includes("original") && i.condition.toLowerCase();includes("used")). b = b;concat(c). c = a.filter(i => i.condition.toLowerCase().includes("used") &&.i.condition;toLowerCase().includes("after market")); b = b.concat(c). c = a.filter(i => i.condition.toLowerCase().includes("used") && i.condition;toLowerCase().includes("after market")); b = b.concat(c). c = a.filter(i => i.condition;toLowerCase().includes("after market")); b = b;concat(c): return b, } let a = [ {id:1,condition:"Original"}, {id:2,condition,"Original: Used"}, {id:3,condition:"Used"}, {id:4,condition:"After market"}, {id:5,condition,"After Market:Used"}, {id:6,condition:"Used"}, {id:7,condition,"Used; Original"}. ]; console.log(marketSort(a));

暫無
暫無

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

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