按键值 0 按数字大小对对象排序
sort objects by key value 0 by number size
如何按 user_id 对这个对象进行排序?
{
key_1: { user_id: 3 },
key_2: { user_id: 1 },
key_3: { user_id: 2 }
}
我需要这个:
{
key_2: { user_id: 1 },
key_3: { user_id: 2 },
key_1: { user_id: 3 }
}
感谢帮助
ES6 规定了对象键的遍历顺序(见此article):
- 按数字升序排列的整数索引。
- 然后,所有其他字符串键,按照它们被添加到对象的顺序。
- 最后,所有符号键,按照它们被添加到对象的顺序。
这意味着只要您使用字符串或符号(不是两者)的非整数键,您就可以通过使用按您需要的插入顺序创建新对象来“排序”对象键。
例如,使用 Object.entries()
得到一个 [key, value]
对的数组,按 user_id
排序,然后使用 Object.fromEntries()
转换回对象:
const obj = { key_1: { user_id: 3 }, key_2: { user_id: 1 }, key_3: { user_id: 2 }}
const result = Object.fromEntries(
Object.entries(obj)
.sort(([, a], [, b]) => a.user_id - b.user_id)
)
console.log(result)
但是,对于具有整数键的对象,这将失败:
const obj = { 1: { user_id: 3 }, 2: { user_id: 1 }, 3: { user_id: 2 }}
const result = Object.fromEntries(
Object.entries(obj)
.sort(([, a], [, b]) => a.user_id - b.user_id)
)
console.log(result)
因此,创建一个键数组,按您想要的顺序对其进行排序,然后使用它按该顺序获取 属性 个值会更好,也更不容易出错:
const obj = { key_1: { user_id: 3 }, key_2: { user_id: 1 }, key_3: { user_id: 2 }}
const result = Object.keys(obj)
.sort((a, b) => obj[a].user_id - obj[b].user_id)
console.log(result.forEach(key => console.log(obj[key])))
你不能。我认为你错过了对象和数组的本质。对象中属性的顺序无关紧要。当然,在一个数组中它可能。
例如,如果您收到一个对象并且想要显示已排序的数据,我建议您将该对象转换为数组然后对其进行排序:
const object = {
key_1: {
user_id: 3
},
key_2: {
user_id: 1
},
key_3: {
user_id: 2
}
};
const array = Object.entries(object)
const sortedArray = array.sort(([, aValue], [, bValue]) => aValue.user_id > bValue.user_id)
console.log(sortedArray)
如何按 user_id 对这个对象进行排序?
{
key_1: { user_id: 3 },
key_2: { user_id: 1 },
key_3: { user_id: 2 }
}
我需要这个:
{
key_2: { user_id: 1 },
key_3: { user_id: 2 },
key_1: { user_id: 3 }
}
感谢帮助
ES6 规定了对象键的遍历顺序(见此article):
- 按数字升序排列的整数索引。
- 然后,所有其他字符串键,按照它们被添加到对象的顺序。
- 最后,所有符号键,按照它们被添加到对象的顺序。
这意味着只要您使用字符串或符号(不是两者)的非整数键,您就可以通过使用按您需要的插入顺序创建新对象来“排序”对象键。
例如,使用 Object.entries()
得到一个 [key, value]
对的数组,按 user_id
排序,然后使用 Object.fromEntries()
转换回对象:
const obj = { key_1: { user_id: 3 }, key_2: { user_id: 1 }, key_3: { user_id: 2 }}
const result = Object.fromEntries(
Object.entries(obj)
.sort(([, a], [, b]) => a.user_id - b.user_id)
)
console.log(result)
但是,对于具有整数键的对象,这将失败:
const obj = { 1: { user_id: 3 }, 2: { user_id: 1 }, 3: { user_id: 2 }}
const result = Object.fromEntries(
Object.entries(obj)
.sort(([, a], [, b]) => a.user_id - b.user_id)
)
console.log(result)
因此,创建一个键数组,按您想要的顺序对其进行排序,然后使用它按该顺序获取 属性 个值会更好,也更不容易出错:
const obj = { key_1: { user_id: 3 }, key_2: { user_id: 1 }, key_3: { user_id: 2 }}
const result = Object.keys(obj)
.sort((a, b) => obj[a].user_id - obj[b].user_id)
console.log(result.forEach(key => console.log(obj[key])))
你不能。我认为你错过了对象和数组的本质。对象中属性的顺序无关紧要。当然,在一个数组中它可能。
例如,如果您收到一个对象并且想要显示已排序的数据,我建议您将该对象转换为数组然后对其进行排序:
const object = {
key_1: {
user_id: 3
},
key_2: {
user_id: 1
},
key_3: {
user_id: 2
}
};
const array = Object.entries(object)
const sortedArray = array.sort(([, aValue], [, bValue]) => aValue.user_id > bValue.user_id)
console.log(sortedArray)