gpt4 book ai didi

javascript - 在javascript中更改嵌套键值的值

转载 作者:行者123 更新时间:2023-11-29 17:36:34 24 4
gpt4 key购买 nike

我正在尝试更改嵌套键值结构中的特定值,但当我设置一个值时,它会更改所有键的值。

初始数据为:

   const data = {
"1.157685561": {
"1222344": {
"batb": [
[0, 0],
[0, 0],
[0, 0]
],
"batl": [
[0, 0],
[0, 0],
[0, 0]
]
},
"1222345": {
"batb": [
[0, 0],
[0, 0],
[0, 0]
],
"batl": [
[0, 0],
[0, 0],
[0, 0]
]
}
}
}

我想改变一个特定路径的值

    data['1.157685561']['1222344']['batl'][0] = [1,2]

但是结果是错误的。因为它改变了:

  • 数据['1.157685561']['1222344']
  • 数据['1.157685561']['1222345']

最终结果:

    {
"1.157685561": {
"1222344": {
"batb": [
[0, 0],
[0, 0],
[0, 0]
],
"batl": [
[1, 2],
[0, 0],
[0, 0]
]
},
"1222345": {
"batb": [
[0, 0],
[0, 0],
[0, 0]
],
"batl": [
[1, 2],
[0, 0],
[0, 0]
]
}
}
}

源代码:https://playcode.io/301552?tabs=console&script.js&output

最佳答案

检查 provided code 的这一部分:

function createEmptyMarketData(runners) {
const data = {};
const marketData = {
batb: [
[0, 0],
[0, 0],
[0, 0]
],
batl: [
[0, 0],
[0, 0],
[0, 0]
]
};

for (const runner of runners) {
data[runner] = marketData;
}

return data;
}

使用 for (const runner of runners) {data[runner] = marketData;} 您正在存储对同一对象的多个引用。这是一个问题。

一个可能的解决方案是将 marketData 更改为每次调用时都会生成一个新的 object 的方法。示例:

function createEmptyMarketData(runners)
{
const data = {};

const marketData = () => ({
batb: [[0, 0], [0, 0], [0, 0]],
batl: [[0, 0], [0, 0], [0, 0]]
});

for (const runner of runners)
{
data[runner] = marketData();
}

return data;
}

新版本: https://playcode.io/301583?tabs=console&script.js&output

关于javascript - 在javascript中更改嵌套键值的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55877000/

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