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