我得到了以下对象
{
"20170007": {
"id": 1
},
"20170008": {
"id" : 2
},
"20170009": {
"id": 3
},
"20170010": {
"id": 4
}
}
期望的输出:
{
"20170010": {
"id": 4
},
"20170009": {
"id": 3
},
"20170008": {
"id" : 2
},
"20170007": {
"id": 1
}
}
我的尝试:
const obj = {
"20170007": {
"id": 1
},
"20170008": {
"id" : 2
},
"20170009": {
"id": 3
},
"20170010": {
"id": 4
}
}
const reverseObj = (obj) => {
let newObj = {}
Object.keys(obj)
.sort()
.reverse()
.forEach((key) => {
console.log(key)
newObj[key] = obj[key]
})
console.log(newObj)
return newObj
}
reverseObj(obj)
奇怪的是,当我在console.log中输入forEach中的键时,键被反转。但是当我将键分配给newObj时,输出仍然是原始顺序... 什么事发生在这里?
编辑:
感谢所有回复,我看了一下Map对象。 Map
new Map([iterable])
实际上我正在寻找并且订单得到保证。
答案 0 :(得分:2)
如果您希望他们有订单,您应该将元素存储在数组中。
const obj = {
"20170007": {
"id": 1
},
"20170008": {
"id" : 2
},
"20170009": {
"id": 3
},
"20170010": {
"id": 4
}
}
const arrayReverseObj = (obj) => {
let newArray = []
Object.keys(obj)
.sort()
.reverse()
.forEach(key => {
console.log(key)
newArray.push( {
'key':key,
'id':obj[key].id
})
})
console.log(newArray)
return newArray
}
arrayReverseObj(obj)

结果类似于你想要的,但是是一个数组(这样元素可以有一个订单):
[{ " key":" 20170010", " id":4 }, { " key":" 20170009", " id":3 }, { " key":" 20170008", " id":2 }, { " key":" 20170007", " id":1 }]
更简洁地说,我们可以在下面的评论中使用@torazaburo所指示的.map()
,而不是完全镜像您的代码布局。一个例子是:
const arrayReverseObj =
(obj) => Object.keys(obj).sort().reverse().map(key=> ({key:key,id:obj[key].id}) );
答案 1 :(得分:1)
对象是Object类型的成员。 这是无序的 属性集合,每个属性包含一个原始值, 对象或功能。存储在对象属性中的函数是 称为方法。
由于对象是无序的,您应该使用数组。