Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/460.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 当我从数组中删除一个元素时,为什么它同时删除该数组和另一个非';行代码中没有提到?_Javascript_Arrays - Fatal编程技术网

Javascript 当我从数组中删除一个元素时,为什么它同时删除该数组和另一个非';行代码中没有提到?

Javascript 当我从数组中删除一个元素时,为什么它同时删除该数组和另一个非';行代码中没有提到?,javascript,arrays,Javascript,Arrays,我在从某个数组中删除一个元素时遇到了问题,但它同时从该数组和另一个不相关的数组中删除了该元素。是否有人发现了这个问题,因为在我看来它看起来是正确的,应该从“nearest.items”数组中删除元素“Beer”,而不是从“locations\u dictionary[0].items”数组中删除 var附近={ “掠夺”:假, “物品”:[“苹果”、“生锈的剑”、“啤酒”、“青铜剑”、“木剑”、“神剑”、“铜币”] }; 常量位置\u字典=[ { “名称”:“城市”, “物品”:[“苹果”、“

我在从某个数组中删除一个元素时遇到了问题,但它同时从该数组和另一个不相关的数组中删除了该元素。是否有人发现了这个问题,因为在我看来它看起来是正确的,应该从“nearest.items”数组中删除元素“Beer”,而不是从“locations\u dictionary[0].items”数组中删除

var附近={
“掠夺”:假,
“物品”:[“苹果”、“生锈的剑”、“啤酒”、“青铜剑”、“木剑”、“神剑”、“铜币”]
};
常量位置\u字典=[
{
“名称”:“城市”,
“物品”:[“苹果”、“生锈的剑”、“啤酒”、“青铜剑”、“木剑”、“神剑”、“铜币”]
},
{
“名称”:“森林”,
“物品”:[“苹果”、“棍子”、“生锈的剑”、“尸体”、“生锈的匕首”]
}
];
函数从_数组(a,v)中删除_项{//a=Array,v=value
对于(i=0;i',nearear',\n locations-->',locations\u dictionary)

您的代码看起来不错。我在JSBin上运行了您的确切代码,并记录了附近和字典中的位置:

[object Object] {
  items: ["Apple", "Rusted Sword", "Bronze Sword", "Wooden Sword", "Excalibur", "Bronze Coin"],
  looted: false
}

[[object Object] {
  items: ["Apple", "Rusted Sword", "Beer", "Bronze Sword", "Wooden Sword", "Excalibur", "Bronze Coin"],
  name: "City"
}, [object Object] {
  items: ["Apple", "Stick", "Rusted Sword", "Corpse", "Rusted Dagger"],
  name: "Forest"
}]

看起来附近的项目中没有啤酒,但是位置的第一个项目中有啤酒。可能问题不在于代码。

您的代码看起来不错。我在JSBin上运行了您的确切代码,并记录了附近和字典中的位置:

[object Object] {
  items: ["Apple", "Rusted Sword", "Bronze Sword", "Wooden Sword", "Excalibur", "Bronze Coin"],
  looted: false
}

[[object Object] {
  items: ["Apple", "Rusted Sword", "Beer", "Bronze Sword", "Wooden Sword", "Excalibur", "Bronze Coin"],
  name: "City"
}, [object Object] {
  items: ["Apple", "Stick", "Rusted Sword", "Corpse", "Rusted Dagger"],
  name: "Forest"
}]

看起来附近的项目中没有啤酒,但是位置的第一个项目中有啤酒。可能问题不在于代码。

如评论部分所述,您的问题似乎是
附近。items
指向内存中与
位置\u字典[0]相同的数组。items

这意味着,如果更改
附近.items
在内存中指向的数组,则
位置字典[0]。items
数组也将更改(因为它们共享同一数组),反之亦然

因此,这个问题的解决方案是在内存中为
nearear.items
创建一个唯一的数组,这样当您更改
nearear.items
时,它不会修改相同的数组

您可以通过使用排列语法来执行此操作:

nearby.items = [...location_dictionary[0]]
这将使它非常接近。items引用内存中自己的唯一数组,并且与
位置字典[0]没有连接/关联。items
数组

以下是一些示例,帮助您了解发生了什么:

设a=[1,2,3];//创建数组[1,2,3]并将其存储在内存中,将“a”指向该数组
设b=a;//使“b”指向内存中a指向的同一数组
b[0]=4;//更改内存中数组的索引0
console.log(a);//更改,因为a和b共享同一阵列

控制台日志(b);//预期更改
如评论部分所述,您的问题似乎是附近的
。项
指向内存中与
位置\u字典[0]相同的数组。项

这意味着,如果更改
附近.items
在内存中指向的数组,则
位置字典[0]。items
数组也将更改(因为它们共享同一数组),反之亦然

因此,这个问题的解决方案是在内存中为
nearear.items
创建一个唯一的数组,这样当您更改
nearear.items
时,它不会修改相同的数组

您可以通过使用排列语法来执行此操作:

nearby.items = [...location_dictionary[0]]
这将使它非常接近。items引用内存中自己的唯一数组,并且与
位置字典[0]没有连接/关联。items
数组

以下是一些示例,帮助您了解发生了什么:

设a=[1,2,3];//创建数组[1,2,3]并将其存储在内存中,将“a”指向该数组
设b=a;//使“b”指向内存中a指向的同一数组
b[0]=4;//更改内存中数组的索引0
console.log(a);//更改,因为a和b共享同一阵列

控制台日志(b);//预期更改
如果我从注释中正确理解,您正在尝试修改附近的
。items
数组以删除“Beer”。您遇到的问题是
locations\u dictionary[0]。由于您在附近分配了
,因此也正在修改项目
。项目
在某处使用以下代码:

附近的
items=locations\u字典[0]。items
解决方案是复制数组而不是分配数组

nearear.items=locations\u字典[0]。items.slice(0)
//或者如果您正在使用es6
nearnear.items=[…位置\u字典[0]。items]
另一个选项(甚至只是除了)是用来过滤掉“啤酒”字符串。这实际上返回数组的新副本,而不修改原始副本。因此,您可以将其分配给附近的
。items
,或者将其用作单独的变量

let items0=[“苹果”、“生锈的剑”、“啤酒”、“青铜剑”、“木剑”、“神剑”、“铜币”]
附近的var={
“掠夺”:假,
“项目”:项目0
};
常量位置\u字典=[
{
“名称”:“城市”,
“项目”:项目0
},
{
“名称”:“森林”,
“物品”:[“苹果”、“棍子”、“生锈的剑”、“尸体”、“生锈的匕首”]
}
];
nearest.items=nearest.items.filter(函数(值、索引){
返回值!=“啤酒”
})
log('nearear array-->',nearear',\n locations-->',locations\u dictionary)

如果我从评论中正确理解,您正试图修改附近的
。items
数组以删除“Beer”。您遇到的问题是
locations\u dict