我有一个看起来像这样的对象(例如):
import styled from 'styled-components';
const LogoDiv = styled.img`
src: url(${(props) => props.bg});
width: 200px;
height: 108px;
position: absolute;
left: 175px;
right: 175px;
bottom: 106px;
z-index: 1;
`;
export default LogoDiv;
排序后我需要的对象是:
const items = [{ name: 'LFB 1Y GF'}, {name: 'LFB 3M GF'}, {name: 'LFB 2Y GF'}, {name: 'LFB 10Y GF'}, {name: 'LFB 5Y GF'}]
我尝试了lodash'_.sortBy()',但输出:
const items = [{ name: 'LFB 3M GF'}, {name: 'LFB 1Y GF'}, {name: 'LFB 2Y GF'}, {name: 'LFB 5Y GF'}, {name: 'LFB 10Y GF'}]
有什么办法可以满足我的分类需求?
编辑:我这样排序:
const items =[{ name: 'LFB 10Y GF'}, {name: 'LFB 1Y GF'}, {name: 'LFB 2Y GF'}, {name: 'LFB 3M GF'}, {name: 'LFB 5Y GF'}]
编辑2:为了更清楚一点,我需要按时间顺序对它进行排序,其中'3M'== 3个月,'1Y'== 1年,等等。我要做的就是'name '-键
编辑3:抱歉,我已经更新了我的代码示例!
答案 0 :(得分:2)
通过使用具有字符串或类似数据结构的数组,您可以使用数字和单位来获取字符串的一部分,以一天为基础获取值,并以天的增量作为排序回调的结果。
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);
答案 1 :(得分:1)
使用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);
答案 2 :(得分:-1)
您必须选择正确的数据结构。否则,您将无法对单个值进行排序。
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" }