Javascript - 使用 reduce 函数按值排序
Javascript - Sort by values using reduce function
尝试sort/reorder从最低值到最高值跟随对象
{ 'xlg': '10',
'lg': '9.6',
'md': '9',
'sm': '5',
'xsm': '3',
'xxsm': '2',
'xxxsm': '1.75',
'xxxxsm': '1'}
像这样:
{ 'xxxxsm': '1',
'xxxsm': '1.75',
'xxsm': '2',
'xsm': '3',
'sm': '5',
'md': '9',
'lg': '9.6',
'xlg': '10'}
这是我到目前为止的输入:
const sortObjectByValues = object => {
const sortedArray = Object.values(object).sort();
const sortedObject = sortedArray.reduce((acc, cur) => {
// No idea....
return acc;
}, {});
return sortedObject;
};
我确定我可以使用 reduce 功能进行锻炼。有人可以帮我解决这个问题吗?
谢谢
而不是 reduce
,使用 sort
按数值顺序对对象条目进行排序会更容易:
const obj = { 'xlg': '10',
'lg': '9.6',
'md': '9',
'sm': '5',
'xsm': '3',
'xxsm': '2',
'xxxsm': '1.75',
'xxxxsm': '1'};
const result = Object.fromEntries(
Object.entries(obj)
.sort((a, b) => a[1] - b[1])
);
console.log(result);
使用对象条目,用数字值对它们进行排序,然后重新构建对象。
更新:更新了当字符串有 pre/post 个数字字符时处理的答案。 (基本上是从字符串中提取数字)。
const obj = {
xlg: "10",
lg: "9.6",
md: "9",
sm: "5",
xsm: "3",
xxsm: "2",
xxxsm: "1.75",
xxxxsm: "1",
abc: "abc2.05def",
usd: ".15",
xyz: "1.72em"
};
const extractNumber = ([,str]) => str.replace(/[a-zA-Z$]+/g, '');
const result = Object.fromEntries(
Object.entries(obj).sort((a, b) => extractNumber(a) - extractNumber(b))
);
console.log(result);
Object.keys(t)
.sort((a,b) => parseFloat(t[a]) - parseFloat(t[b]))
.reduce((acc, key) => ({ ...acc, acc[key]:t[key] }), {});
尝试sort/reorder从最低值到最高值跟随对象
{ 'xlg': '10',
'lg': '9.6',
'md': '9',
'sm': '5',
'xsm': '3',
'xxsm': '2',
'xxxsm': '1.75',
'xxxxsm': '1'}
像这样:
{ 'xxxxsm': '1',
'xxxsm': '1.75',
'xxsm': '2',
'xsm': '3',
'sm': '5',
'md': '9',
'lg': '9.6',
'xlg': '10'}
这是我到目前为止的输入:
const sortObjectByValues = object => {
const sortedArray = Object.values(object).sort();
const sortedObject = sortedArray.reduce((acc, cur) => {
// No idea....
return acc;
}, {});
return sortedObject;
};
我确定我可以使用 reduce 功能进行锻炼。有人可以帮我解决这个问题吗?
谢谢
而不是 reduce
,使用 sort
按数值顺序对对象条目进行排序会更容易:
const obj = { 'xlg': '10',
'lg': '9.6',
'md': '9',
'sm': '5',
'xsm': '3',
'xxsm': '2',
'xxxsm': '1.75',
'xxxxsm': '1'};
const result = Object.fromEntries(
Object.entries(obj)
.sort((a, b) => a[1] - b[1])
);
console.log(result);
使用对象条目,用数字值对它们进行排序,然后重新构建对象。
更新:更新了当字符串有 pre/post 个数字字符时处理的答案。 (基本上是从字符串中提取数字)。
const obj = {
xlg: "10",
lg: "9.6",
md: "9",
sm: "5",
xsm: "3",
xxsm: "2",
xxxsm: "1.75",
xxxxsm: "1",
abc: "abc2.05def",
usd: ".15",
xyz: "1.72em"
};
const extractNumber = ([,str]) => str.replace(/[a-zA-Z$]+/g, '');
const result = Object.fromEntries(
Object.entries(obj).sort((a, b) => extractNumber(a) - extractNumber(b))
);
console.log(result);
Object.keys(t)
.sort((a,b) => parseFloat(t[a]) - parseFloat(t[b]))
.reduce((acc, key) => ({ ...acc, acc[key]:t[key] }), {});