gpt4 book ai didi

javascript - 仅更改 JavaScript map 的一个实例

转载 作者:行者123 更新时间:2023-11-28 17:26:06 25 4
gpt4 key购买 nike

只是想知道最好的方法是什么。我设置了一个 javascript map 。然后我将 map 的实例分配给一个对象。然而,当我更改对象的一个​​实例时,它会更改 map 的其他实例。因此,如果您运行下面的代码,您会注意到所有寒冷实例的温度都更改为 10,如果只是最后一个,则应该这样做。

我在下面放置了一个可运行的代码片段。我这里也有一个 fiddle https://jsfiddle.net/bupLsf9n/(我认为在 fiddle 上阅读console.log更容易)

var myMap = new Map([
["hot", { temperature: 100 }],
["warm", { temperature: 50 }],
["cold", { temperature: 0 }],
]);

var data = [
{ id: 1, map: myMap.get("hot") },
{ id: 2, map: myMap.get("warm") },
{ id: 3, map: myMap.get("cold") },
{ id: 4, map: myMap.get("hot") },
];
$(document).ready(function() {
data.filter(x => x.id == 4)[0].map.temperature = 10;
console.log(data);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

最佳答案

如果您希望 data[x].map 成为 Map 的不同实例,您最终可以这样做,但我不确定这是否是您想要的:

var myMap = () => new Map([
['hot', {
'temperature': 100
}],
['warm', {
'temperature': 50
}],
['cold', {
'temperature': 0
}],
]);

var data = [{
id: 1,
map: myMap().get('hot')
},
{
id: 2,
map: myMap().get('warm')
},
{
id: 3,
map: myMap().get('cold')
},
{
id: 4,
map: myMap().get('hot')
},
]
$(document).ready(function() {
data.filter(x => x.id == 4)[0].map.temperature = 10;
console.log(data[0]);
console.log(data[3]);
//data[0].map != data[3].map
});

--

var myMap = () => new Map()

此行返回一个创建 Map 新实例的函数,这就是为什么您必须像在数据数组 map : myMap() 中那样调用它才能为每个条目获取一个新实例

编辑:

如果您想要特定值的副本而不是 Map 的新实例,您可以保留 var myMap = new Map([...]) 声明并对每个条目执行此操作:

  var data = [{
id: 1,
map: Object.assign({}, myMap.get('hot'))
}, //etc...
]

但就像@Pointy在评论中所说,这只会制作对象的浅拷贝,希望它有所帮助

关于javascript - 仅更改 JavaScript map 的一个实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51571425/

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