如何使用javascript按月份名称按字符串排序?
我有一个字符串如何使用javascript按月份名称按字符串排序?,javascript,reactjs,Javascript,Reactjs,我有一个字符串“四月、八月、七月、六月、五月”。我想按月名订购。 所需的输出是四月、五月、六月、七月、八月最简单的解决方案可能是: const s = "APRIL,AUGUST,JULY,JUNE,MAY"; const months = ["JANUARY", "FEBRUARY", "MARCH", "APRIL", "MAY", "JUNE", &q
“四月、八月、七月、六月、五月”
。我想按月名订购。
所需的输出是
四月、五月、六月、七月、八月
最简单的解决方案可能是:
const s = "APRIL,AUGUST,JULY,JUNE,MAY";
const months = ["JANUARY", "FEBRUARY", "MARCH", "APRIL", "MAY", "JUNE", "JULY", "OCTOBER", "SEPTEMBER", "NOVEMBER", "DECEMBER"]
let resultArray = [];
months.forEach(month => {
if (s.includes(month)) {
resultArray.push(month);
}
})
console.log(resultArray.join(','));
您可以保留所有月份的订单列表,并根据该列表进行排序:
const order=[“一月”、“二月”、“三月”、“四月”、“五月”、“六月”、“七月”、“八月”、“九月”、“十月”、“十一月”、“十二月”];
常量排序=(数据)=>
数据
.split(“,”)
.sort((a,b)=>order.indexOf(a)-order.indexOf(b))
.join()
常量数据1='四月、八月、七月、六月、五月'
控制台日志(排序(数据1))
常量数据2='四月、八月、七月、六月、五月、四月'
log(sort(data2))
对预排序的数组使用Array#filter(),并检查字符串中是否存在每个名称
const s=“四月、八月、七月、六月、五月”;
常量月=[“一月”、“二月”、“三月”、“四月”、“五月”、“六月”、“七月”、“十月”、“九月”、“十一月”、“十二月”]
const res=months.filter(m=>s.includes(m)).join()
console.log(res)
其他解决方案可能效率低下,因为它们依赖于原型的String.includes或Array.indexOf,其成本仅为O(n)(其中n是输入字符串的长度)。
我提出了一个使用字典的替代解决方案,它支持在摊销O(1)
时间中进行索引。
总体时间复杂度为O(m logm)
,其中m
是输入
字符串中的月数
您可以在摊销O(1)时间内,在monthNamesObj
中索引月份名称
const input=“四月、八月、七月、六月、五月”;
//inputMonthNames=[“四月”、“八月”、“七月”、“六月”、“五月”]
常量inputMonthNames=input.split(',');
//将月份名称映射到相应顺序索引的字典
const monthNamesObj={
“一月”:0,
"二月":一,,
"三月":二,,
"四月":三,,
"五月":四,,
六月五日,
七月六日,
八月七日,
"九月":八,,
十月九日,
11月10日,
"12":11,,
};
//根据输入月份名称的数字顺序对其进行排序
const orderedMonts=inputMonthNames.sort((a,b)=>MonthNamesBj[a]-MonthNamesBj[b]);
//四月、五月、六月、七月、八月
log(orderedMonths.join(',')代码>1。按,“
拆分字符串。2.对获得的数组进行排序。3.通过,“
加入它。