簡體   English   中英

如何對包含數字和字符串混合的對象進行排序?

[英]How to sort a object containing a mix of numbers and strings?

我有一個看起來像這樣的對象(例如):

const items = [{ name: 'LFB 1Y GF'}, {name: 'LFB 3M GF'}, {name: 'LFB 2Y GF'}, {name: 'LFB 10Y GF'}, {name: 'LFB 5Y GF'}]

排序后我需要對象的樣子是:

const items = [{ name: 'LFB 3M GF'}, {name: 'LFB 1Y GF'}, {name: 'LFB 2Y GF'}, {name: 'LFB 5Y GF'}, {name: 'LFB 10Y GF'}]

我試過 lodash '_.sortBy()' 但它正在輸出:

const items =[{ name: 'LFB 10Y GF'}, {name: 'LFB 1Y GF'}, {name: 'LFB 2Y GF'}, {name: 'LFB 3M GF'}, {name: 'LFB 5Y GF'}]

有什么辦法可以滿足我的分類需求嗎?

編輯:我是這樣排序的:

const sortedData = _.sortBy(items, function (item) {
    return item.name;
});

編輯 2:為了更清楚,我需要按時間順序對它進行排序,其中 '3M' == 3 個月,'1Y' == 1 年等。我所要做的就是使用 'name'-key

編輯 3:抱歉造成混亂,我已經更新了我的代碼示例!

使用localeCompare()replace()

正則表達式演示

 const items = [{name:'LFB 10Y GF'},{name:'LFB 1Y GF'},{name:'LFB 2Y GF'},{name:'LFB 3M GF'},{name:'LFB 5Y GF'}] const result = items.sort((a, b) => { a = a.name.replace(/(\\d+)(.)/, '$2$1') b = b.name.replace(/(\\d+)(.)/, '$2$1') return a.localeCompare(b, 'en', {numeric: true}) }); console.log(result);

通過使用包含字符串或類似數據結構的數組,您可以獲取帶有數字和單位的字符串部分,獲取基於一天的值並將天數的增量作為排序回調的結果。

 const getDays = ([count, unit]) => { var times = { D: 1, M: 30, Y: 365 }; return count * times[unit]; }, getPart = s => s.match(/(\\d+)([DMY])(?=\\s)/).slice(1), items = ['LFB 5Y GF', 'LFB 3M GF', 'LFB 2Y GF', 'LFB 10Y GF', 'LFB 3Y GF']; items.sort((a, b) => getDays(getPart(a)) - getDays(getPart(b))); console.log(items);

您必須選擇正確的數據結構。 否則,您將無法對單個值進行排序。

const items = { name: 'LFB 10Y GF', name: 'LFB 1Y GF', name: 'LFB 2Y GF', name: 'LFB 3M GF', name: 'LFB 5Y GF'}

表示const items = { name: "LFB 5Y GF" }

暫無
暫無

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

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