javascript 按键以升序对对象排序

8xiog9wr  于 5个月前  发布在  Java
关注(0)|答案(4)|浏览(52)

我目前有一个这样的对象

let obj = {
    "5": "961131",
    "8": "961127",
    "5,5": "961107",
    "7": "961103",
    "9.5": "961115"
}

字符串
有没有可能按照键的升序来排序呢?我想得到的结果是:

obj = {
    "5": "961131",
    "5,5": "961107",
    "7": "961103",
    "8": "961127",
    "9.5": "961115"
}


这可能会涉及到创建一个新的对象,我不介意,只是不知道如何做到这一点

sigwle7e

sigwle7e1#

你不能。对象键是不可排序的,你无法预测每个浏览器如何遍历对象。
但是你可以像这样使用数组作为索引。记住格式化你的键。如果是字符串,就用.sort()。否则你可能应该用.sort((a, b) => parseFloat(a) - parseFloat(b));比较你的键

let obj = {
    "5": "961131",
    "8": "961127",
    "5,5": "961107",
    "7": "961103",
    "9.5": "961115"
}

let index = Object.keys(obj).sort()

// iterate method
index.forEach((key) => {
  console.log(key, obj[key])
})

// or array of sorted object
let sortedArrayOfObject = index.map((v) => {
  return {key: v, value: obj[v]}
})
console.log(sortedArrayOfObject)

字符串

ego6inou

ego6inou2#

var keySorted = Object.keys(obj).sort();
var newObj={}; 
for (let i = 0; i < keySorted.length; i++) {
    newObj[keySorted[i]]=obj[keySorted[i]];
}
obj=newObj;

字符串

1zmg4dgp

1zmg4dgp3#

let obj = {
    "5": "961131",
    "8": "961127",
    "5,5": "961107",
    "7": "961103",
    "9.5": "961115"
}
const objSortedByKeys = Object.fromEntries(Object.entries(obj).sort((a,b)=>a[0].localeCompare(b[0])));

字符串

ma8fv8wu

ma8fv8wu4#

这不是你能做到的

let obj = {
    "5": "961131",
    "8": "961127",
    "5,5": "961107",
    "7": "961103",
    "9.5": "961115"
}

let obj2 = {};

for (let key of Object.keys(obj).sort()) {
    console.log(key);
    obj2[key] = obj[key];
}

console.log(obj2);

字符串
但问题是你想重新排序它们。所以,一种替代方法是对键进行排序并重新排序它们:

let obj = {
    "5": "961131",
    "8": "961127",
    "5,5": "961107",
    "7": "961103",
    "9.5": "961115"
}

for (let key of Object.keys(obj).sort()) {
    console.log(`${key}: ${obj[key]}`);
}


你也可以使用Generator:

const myIterator = function* (obj) {
    let rawKeys = Object.keys(obj);
    let keys = rawKeys.sort();
    for (let key of keys) {
        yield key;
    }
}

let obj = {
    "5": "961131",
    "8": "961127",
    "5,5": "961107",
    "7": "961103",
    "9.5": "961115"
}

for (let key of myIterator(obj)) {
    console.log(`${key}: ${obj[key]}`);
}

相关问题