每次在JavaScript中生成数组时递增或重置计数

每次在JavaScript中生成数组时递增或重置计数,javascript,arrays,Javascript,Arrays,下面是一个场景。我得到的当前输出是这样一个对象数组 [{ usertype: '2', username: 'Pawar', calls: [], time: 0 }, { usertype: '2', username: 'Pallavi', calls: [ [Object] ], time: 1 }] 如您所见,对象中有一个调用数组。有时calls数组是空的,有时它包含值。因此,如果调用数组为空,则时间键的值应为0

下面是一个场景。我得到的当前输出是这样一个对象数组

[{ 
    usertype: '2',
    username: 'Pawar',
    calls: [],
    time: 0 },
  { 
    usertype: '2',
    username: 'Pallavi',
    calls: [ [Object] ],
    time: 1 }]
如您所见,对象中有一个调用数组。有时calls数组是空的,有时它包含值。因此,如果调用数组为空,则时间键的值应为0 sp。这部分工作正常。但是如果calls对象不是空的,那么时间应该增加1。假设我让代码执行10次,如果调用数组在这10次迭代中不为空,则时间应显示为10,如果在任何迭代中调用数组为空,则时间将为0,然后继续递增,直到调用数组为空

因为每次我执行代码时都会生成一个新的对象数组,所以我的时间不会增加。我声明了一个值为0的时间变量,当calls数组不为空时,我添加了设置time=time+1的代码。但在这里,每当calls数组不为空时,时间仍然为1

我想要的预期输出如下所示:

如果代码执行10秒,且调用数组不为空,则预期输出为:

[{ 
    usertype: '2',
    username: 'Pawar',
    calls: [],
    time: 0 },
  { 
    usertype: '2',
    username: 'Pallavi',
    calls: [ [Object] ],
    time: 10 }]

请帮助我找出解决此问题的方法

我认为您必须保留旧阵列(或对象)的副本,然后才能完全替换它们。您必须根据旧对象的属性更新新对象,然后替换数组/对象

我在下面的代码片段中进行了模拟。我不是说这是最好的解决方案,但它是一个(没有任何自动机制来更新它们)

var workingArray=[{
用户类型:“2”,
用户名:“A”,
电话:[],
时间:0
}, {
用户类型:“2”,
用户名:“B”,
电话:[],
时间:10
}, {
用户类型:“2”,
用户名:“C”,
电话:[],
时间:10
}];
函数getRandomInt(最小值、最大值){
返回Math.floor(Math.random()*(max-min+1))+min;
}
函数getNewData(){
让usersNames=['A','B','C'];
设newData=[];
forEach(usersName=>{
让callsNumber=getRandomInt(0,3);
让调用=[];
for(设i=0;i{
//搜索与此匹配的旧用户
让oldUser=null;
for(设i=0;i”+newUser.time);
}否则{
console.log(newUser.username+“=>无更改(“+newUser.time+”);
}
工作阵列[i]=新用户;
打破
}
}
});
模拟();
}, 1000);
}

模拟()
但是如果calls对象不是空的,那么时间应该增加1
=>您指的是刚刚生成的元素的calls对象吗?你增加了谁的
时间
字段?在所有元素中,还是仅在当前元素中?在我的数组中,所有对象都包含数组调用。因此,在调用数组为空的对象中,时间应为0,如果不为空,则时间应递增1,直到它变为空。我的数组中有许多对象。根据每个对象的每个对象的调用数组,时间将相应地增加或设置为0对象是否更新自身?具有空调用数组的对象可能会收到元素?是,根据每次迭代中从服务器发送的数据,每次都会更新每个对象中的调用数组。调用数组在一段时间内保持为空,并且可能随时接收数据,具体取决于服务器。为什么要生成新数组而不是更新旧数组?我认为你需要解决这个问题。否则,没有简单的方法来保存任何信息。非常感谢@Adi为我提供的帮助。我实现了你的代码,它为我工作