Javascript-使用reduce函数按值排序

Javascript-使用reduce函数按值排序,javascript,arrays,sorting,reduce,Javascript,Arrays,Sorting,Reduce,尝试从最低值和最高值对以下对象进行排序/重新排序 { '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', 'l

尝试从最低值和最高值对以下对象进行排序/重新排序

{ '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])
);

控制台日志(结果)使用对象条目,使用数字值对它们进行排序,然后再次构建对象

更新:当字符串具有数字的前/后字符时,更新要处理的答案。(基本上是从字符串中提取数字)

const obj={
xlg:“10”,
lg:“9.6”,
医学博士:“9”,
sm:“5”,
xsm:“3”,
xxsm:“2”,
xxxsm:“1.75”,
XXSM:“1”,
abc:“abc2.05def”,
美元:“$3.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))
);

控制台日志(结果)“使用reduce函数按值排序”
reduce
不是正确的排序工具。为什么你认为你需要使用它?还要注意,虽然对象属性现在有顺序,但使用这种顺序几乎从来都不是一个好主意。如果您想要订单,请使用数组。谢谢-如果值不是一个数字,而是类似“1.75em”、“9.6em”的值,该怎么办。然后,首先使用您喜欢的任何方法从字符串中取出数字部分,然后比较该部分。例如
[\d.]+
是否有效谢谢-如果值不是一个数字,而是类似于“1.75em”、“9.6em”的值呢。很抱歉mate@DannyKim,我之前错过了,只是更新了答案。首先从字符串中提取数字(上面是regex的一个示例),然后在排序中使用它。这应该适用于
1.75em
$2.0
等。希望这有帮助。虽然此代码可能解决OP的问题,但最好包含一个关于代码如何解决OP问题的解释。通过这种方式,未来的访问者可以从您的帖子中学习,并将其应用到自己的代码中。因此,它不是一种编码服务,而是一种知识资源。此外,高质量、完整的答案更有可能被提升。这些特性,以及所有帖子都是独立的要求,是SO作为一个平台的一些优势,使其区别于论坛。您可以编辑以添加其他信息和/或使用源文档补充说明。
Object.keys(t)
    .sort((a,b) => parseFloat(t[a]) - parseFloat(t[b]))
    .reduce((acc, key) => ({ ...acc, acc[key]:t[key] }), {});