jquery 根据字符串的数字范围对对象数组进行排序[已关闭]

lh80um4z  于 2023-01-30  发布在  jQuery
关注(0)|答案(3)|浏览(83)

已关闭。此问题需要details or clarity。当前不接受答案。
**想要改进此问题?**添加详细信息并通过editing this post阐明问题。

四年前关闭了。
Improve this question
我有一个对象数组

let myObj =[{
              "60+": 0.1413972485314015,
              "18-29": 0.0832178903621611,
              "40-49": 0.1033361204013377,
              "30-39": 0.0835906328864075,
              "Under 18": 0.1326368677036551,
              "50-59": 0.1224973366151133
           }]

我想对上面的对象数组进行排序

let myObj =[{
             "Under 18": 0.1326368677036551,
              "18-29": 0.0832178903621611,
              "30-39": 0.0835906328864075,
              "40-49": 0.1033361204013377,
              "50-59": 0.1224973366151133
              "60+": 0.1413972485314015,
           }]

我如何使用javascript实现这种排序?

cclgggtu

cclgggtu1#

可以为Under+量词取一个偏移量,然后根据排序位置取值,然后返回值的增量或偏移量的增量。
稍后,您可以使用排序键构建一个新对象。

var object = { "60+": 0.1413972485314015, "18-29": 0.0832178903621611, "40-49": 0.1033361204013377, "30-39": 0.0835906328864075, "Under 18": 0.1326368677036551, "50-59": 0.1224973366151133 },
    keys = Object
        .keys(object)
        .sort((a, b) => {
            function getV(s, side) {
                var offset = { 'Under': -1, null: 0, '+': 1 }[s.match(/Under|\+/)],
                    value = s.match(/\d+/g)[offset && side];
                return { value, offset };
            }
            
            var aa = getV(a, 1),
                bb = getV(b, 0);

            return aa.value - bb.value || aa.offset - bb.offset;
        }),
   newObject = Object.assign(...keys.map(k => ({ [k]: object[k] })));

console.log(newObject);
.as-console-wrapper { max-height: 100% !important; top: 0; }
yvt65v4c

yvt65v4c2#

您可以使用第一个字符进行排序,并考虑第一个字符是否为数字,

let myObj = [{
    "60+": 0.1413972485314015,
    "18-29": 0.0832178903621611,
    "40-49": 0.1033361204013377,
    "30-39": 0.0835906328864075,
    "Under 18": 0.1326368677036551,
    "50-59": 0.1224973366151133
}];

const ordered = {};

Object.keys(myObj[0]).sort(
    function(a, b) {
        if (isNaN(Number(a.charAt(0))))
            return -1;
        if (isNaN(Number(b.charAt(0))))
            return 1;
        return a.charAt(0) - b.charAt(0);
    }

).forEach(function(key) {
    ordered[key] = myObj[0][key];
});
console.log(ordered);
k10s72fa

k10s72fa3#

你不能直接这么做,你必须改变你的结构。类似这样的东西。我想修改后的结构也是有道理的。

let myObj = [{
  "60": 0.1413972485314015,
  "29": 0.0832178903621611,
  "49": 0.1033361204013377,
  "39": 0.0835906328864075,
  "18": 0.1326368677036551,
  "59": 0.1224973366151133
}]

let result = Object.keys(myObj[0]).sort((a, b) => a - b).map(val => ({
  [val]: myObj[0][val]
}));

console.log(result);

相关问题