Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/461.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_Discord.js - Fatal编程技术网

Javascript 阻止对象共享值

Javascript 阻止对象共享值,javascript,discord.js,Javascript,Discord.js,为了进行设置,我创建了两个震源组对象,将它们存储在一个数组中,然后将数组打印到控制台。这是创建两个震源组对象后得到的结果 [ { number: 1, activities: [], addActivity: [Function (anonymous)] }, { number: 2, activities: [], addActivity: [Function (anonymous)] } ] 震源组对象的addActivity函数将活动添加到指定对象的活动数组中。这就是函数

为了进行设置,我创建了两个震源组对象,将它们存储在一个数组中,然后将数组打印到控制台。这是创建两个震源组对象后得到的结果

[
  { number: 1, activities: [], addActivity: [Function (anonymous)] },
  { number: 2, activities: [], addActivity: [Function (anonymous)] } 
]
震源组对象的addActivity函数将活动添加到指定对象的活动数组中。这就是函数

    fleet.addActivity = function(activity) {
        this.activities.push(activity);
    }
但是,每当我使用此函数时,它都会更改数组中的两个震源组对象,使它们的编号与我指定的编号相同。比如说,

const fleet = Fleet.getFleet(1);
fleet.addActivity('Run');
这是在控制台中打印的:

[
  {
    number: 1,
    activities: [ 'Run' ],
    addActivity: [Function (anonymous)]
  },
  { number: 1, activities: [], addActivity: [Function (anonymous)] }
]
如果我再次使用

const fleet = Fleet.getFleet(2);
fleet.addActivity('Walk');
控制台将打印:

[
  {
    number: 2,
    activities: [ 'Walk', 'Run' ],
    addActivity: [Function (anonymous)]
  },
  { number: 2, activities: [], addActivity: [Function (anonymous)] }
]
有人知道如何解决这个问题吗

编辑-以下是getFleet函数:

function getFleet(fleetNumber) {
    let result = exports.fleets.filter(function (e) {
        return e.number = fleetNumber;
    });
    return result[0];
}
我也尝试过lodash深度克隆方法,但我仍然有同样的问题。这就是我的addFleet函数当前的外观。我以前创建车队的方法已被注释掉

function addFleet(number) {
    /*let fleet = {
        number: number,
        activities: []
    };
    fleet.addActivity = function(activity) {
        this.activities.push(activity);
    }*/
    const deepClone = lodash.cloneDeep(originalFleet);
    deepClone.number = number;
    exports.fleets.push(deepClone);
    exports.fleetAmount += 1;
    exports.currentFleets.push(number);
}

您的问题在
getFleet()函数中。您实际上是在覆盖变量,而不是检查每个对象编号是否相等。解决方法很简单,只需将一个等号改为三个

函数getFleet(fleetNumber){
让结果=exports.fleets.filter(函数(e){
返回e.number==fleetNumber;//检查是否相等,而不是覆盖
});
返回结果[0];
}
此外,您正在使函数过于复杂化。因为您只需要找到第一个匹配项,所以应该使用
Array.prototype.find()

函数getFleet(fleetNumber){
返回exports.fleets.find((e)=>e.number==fleetNumber)
}

这是否回答了您的问题?请显示
getFleet
功能。请查看您昨天发布的问题,因为我在您发布答案时考虑了这个问题: