我在从某个数组中删除一个元素时遇到问题,但是它同时从该数组和另一个不相关的数组中删除了该元素。有谁发现问题,因为对我来说看起来正确,应该从“ 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>

07-24 09:50
查看更多