gpt4 book ai didi

JavaScript - 遍历对象

转载 作者:行者123 更新时间:2023-11-30 15:07:40 26 4
gpt4 key购买 nike

我有一个这样的对象,它是从外部端点获取的,因此无法更改:

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com