簡體   English   中英

按定義順序排序數組

[英]Ordering array in defined order

我已經嘗試了幾種答案,但似乎沒有任何效果。 我正在處理一些數據並將其放置在數組上。 為此,我有以下內容

let aggData = [];

for (let i = 0; i < data.length; i++) {
    let flag = data[i]['Category'].replace(/[_]/g, " ");
    flag = flag.toLowerCase()
        .split(' ')
        .map((s) => s.charAt(0).toUpperCase() + s.substring(1))
        .join(' ');

    aggData.push({
        "Flag": flag,
        "Freq": data[i]['Count']
    });
}
console.log( JSON.stringify( aggData ) );

上面的輸出如下

[
    {"Flag":"Four","Freq":123},
    {"Flag":"One","Freq":234},
    {"Flag":"Three","Freq":345},
    {"Flag":"Two Days","Freq":456}
]

因此,看起來它自然是根據字母順序對其進行排序。 我需要按照我定義的順序,更具體地說

let order = ["Three", "One", "Two Days", "Four"];

let arr = aggData.sort(function(a,b) {
    return order.indexOf( a.key ) > order.indexOf( b.key );
});

console.log( 'Ordered: ', JSON.stringify( arr ) );

上面返回的是與以前完全相同的順序。 如何按我要求的方式訂購它?

謝謝

您需要獲取正確的屬性Flag並采用增量而不是布爾值。

順便說一句, Array#sort改變了數組。

 var aggData = [{ Flag: "Four", Freq: 123 }, { Flag: "One", Freq: 234 }, { Flag: "Three", Freq: 345 }, { Flag: "Two Days", Freq: 456 }], order = ["Three", "One", "Two Days", "Four"]; aggData.sort(function (a, b) { return order.indexOf(a.Flag) - order.indexOf(b.Flag); }); console.log(aggData); 
 .as-console-wrapper { max-height: 100% !important; top: 0; } 

您需要做的就是正確使用sort ,返回一個數字而不是一個布爾值……當然要使用正確的屬性……

 let data = [ {"Flag":"Four","Freq":123}, {"Flag":"One","Freq":234}, {"Flag":"Three","Freq":345}, {"Flag":"Two Days","Freq":456} ] let order = ["Three", "One", "Two Days", "Four"]; let arr = data.sort(function(a,b) { return order.indexOf( a.Flag ) - order.indexOf( b.Flag ); }); console.log( 'Ordered: ', JSON.stringify( arr ) ); 

暫無
暫無

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

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