我有一个这样的对象,它是从外部端点获取的,因此无法更改:
let obj = {
0: { "time": 1, "day": 1, },
1: { "time": 2, "day": 1, },
2: { "time": 3, "day": 1, },
3: { "time": 1, "day": 2, },
4: { "time": 2, "day": 2, },
5: { "time": 3, "day": 2, }
}
我需要把它变成这样的格式:
1: {
1: { "time": 1, "day": 1 },
2: { "time": 2, "day": 1 },
3: { "time": 3, "day": 1 },
},
2: {
1: { "time": 1, "day": 2 },
2: { "time": 2, "day": 2 },
3: { "time": 3, "day": 2 },
}
第一个键是日期,第二个键是时间。
我的尝试没有成功
let obj = {
0: { "time": 1, "day": 1, },
1: { "time": 2, "day": 1, },
2: { "time": 3, "day": 1, },
3: { "time": 1, "day": 2, },
4: { "time": 2, "day": 2, },
5: { "time": 3, "day": 2, }
}
let test = {}
let defaultRow = {
1: {},
2: {}
}
Object.keys(obj).forEach((key) => {
if (!test[obj[key]["day"]]) {test[obj[key]["day"]] = defaultRow}
test[obj[key]["day"]][obj[key]["time"]] = obj[key]
})
console.log(test)
出于某种原因,这两天包含相同的数据。我怎样才能做到这一点?感谢您的帮助!
最佳答案
Both days contain the same data for some reason
因为您为每一行分配了相同的对象引用 defaultRow
。一个简单的修复方法是将 defaultRow
变成一个每次都返回一个新对象的函数
let obj = {
0: { "time": 1, "day": 1, },
1: { "time": 2, "day": 1, },
2: { "time": 3, "day": 1, },
3: { "time": 1, "day": 2, },
4: { "time": 2, "day": 2, },
5: { "time": 3, "day": 2, }
}
let test = {}
let defaultRow = function() {
return {
1: {},
2: {}
}
}
Object.keys(obj).forEach((key) => {
if (!test[obj[key]["day"]]) {
test[obj[key]["day"]] = defaultRow();
}
test[obj[key]["day"]][obj[key]["time"]] = obj[key]
})
console.log(test)
问题的简单例子
var obj ={a:1},
foo = obj,
bar = obj;
foo.a=2;
console.log(bar.a) //returns 2 because is same object as foo
关于JavaScript - 遍历对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45506367/