我在从某个数组中删除一个元素时遇到问题,但是它同时从该数组和另一个不相关的数组中删除了该元素。有谁发现问题,因为对我来说看起来正确,应该从“ nearby.items”数组中删除元素“ Beer”,而不要从“ locations_dictionary [0] .items”数组中删除。
var nearby = {
"looted": false,
"items": ["Apple","Rusted Sword","Beer","Bronze Sword","Wooden Sword","Excalibur","Bronze Coin"]
};
const locations_dictionary = [
{
"name": "City",
"items": ["Apple","Rusted Sword","Beer","Bronze Sword","Wooden Sword","Excalibur","Bronze Coin"]
},
{
"name": "Forest",
"items": ["Apple","Stick","Rusted Sword","Corpse","Rusted Dagger"]
}
];
function Remove_Item_From_Array(a,v) { //a = array, v = value
for(i = 0; i < a.length; i++) {
if(a[i] === v) {
a.splice(i,1);
}
}
}
nearby.items.forEach(function(value,index) {
if("Beer" == value) {
Remove_Item_From_Array(nearby.items,"Beer");
return;
}
})
console.log('nearby array ---> ' , nearby, '\n locations ---> ', locations_dictionary)
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
最佳答案
如果我从注释中正确理解,您正在尝试修改nearby.items
数组以删除“啤酒”。您遇到的问题是,还修改了locations_dictionary[0].items
,因为您在某处使用以下代码分配了nearby.items
:
nearby.items = locations_dictionary[0].items
解决方案是复制数组而不是分配它。
nearby.items = locations_dictionary[0].items.slice(0)
// or if you're using es6
nearby.items = [...locations_dictionary[0].items]
另一个选择(或什至只是附加)是使用
Array#Filter
过滤掉“啤酒”字符串。实际上,这将返回数组的新副本,而无需修改原始副本。因此,您可以将其分配给nearby.items
或仅将其用作单独的变量。let items0 = ["Apple","Rusted Sword","Beer","Bronze Sword","Wooden Sword","Excalibur","Bronze Coin"]
var nearby = {
"looted": false,
"items": items0
};
const locations_dictionary = [
{
"name": "City",
"items": items0
},
{
"name": "Forest",
"items": ["Apple","Stick","Rusted Sword","Corpse","Rusted Dagger"]
}
];
nearby.items = nearby.items.filter(function(value,index) {
return value !== "Beer"
})
console.log('nearby array ---> ' , nearby, '\n locations ---> ', locations_dictionary)
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>