Javascript 用随机数作为索引和对象作为元素创建的数组给出了错误的结果

Javascript 用随机数作为索引和对象作为元素创建的数组给出了错误的结果,javascript,arrays,indexing,Javascript,Arrays,Indexing,我有一个小脚本,滚动随机数并将它们放入数组。如果项目(对象)不存在,则必须添加该项目,否则需要更新该项目。id必须是唯一标识符。不知何故,我得到了重复的身份证,我不知道为什么会发生这种情况 我希望在转鼓后得到这个(30个转鼓的例子): 而不是: [{"id":1,"min":0,"max":7},{"id":2,"min":0,"max":2},{"id":3,"min":0,"max":10},{"id":1,"min":0,"max":11}] 有人知道问题出在哪里吗?提前谢谢 var

我有一个小脚本,滚动随机数并将它们放入数组。如果项目(对象)不存在,则必须添加该项目,否则需要更新该项目。id必须是唯一标识符。不知何故,我得到了重复的身份证,我不知道为什么会发生这种情况

我希望在转鼓后得到这个(30个转鼓的例子):

而不是:

[{"id":1,"min":0,"max":7},{"id":2,"min":0,"max":2},{"id":3,"min":0,"max":10},{"id":1,"min":0,"max":11}]
有人知道问题出在哪里吗?提前谢谢

var colluuu=[];
对于(i=0;i<30;i++){
随机数=数学楼层((数学随机()*3)+1);
如果(!coll_u[随机数]){
//项不存在,因此将添加到数组中
科尔推({
id:随机数,
分:0,,
最高:1
});
}否则{
//项目已存在,因此将对其进行更新
coll_u[随机数]['max']++;
}
}
document.write(JSON.stringify(coll_))
coll
是一个数组-检查
coll\u[随机数]
只会检查是否存在某个索引,这与
id
无关。不要使用数组,而是使用由
id
s索引的对象,然后在完成迭代后获取该对象的值:

constobj={};
for(设i=0;i<30;i++)
{
const rand=Math.floor((Math.random()*3)+1);
如果(!obj[rand]){
//项不存在,因此将添加到数组中
obj[rand]={id:rand,min:0,max:1};
}否则{
//项目已存在,因此将对其进行更新
obj[rand].max++;
} 
}
console.log(Object.values(obj))以下代码(已修改)给出了预期结果:

var coll_ = [];

for (let i = 0; i < 10; i++) {

    random_number = Math.floor((Math.random() * 3) + 1);

    // Item doesnt exist so will be added to the array
    if (!coll_[random_number]) {

        coll_[random_number] = {
                                    id: random_number,
                                    min: 0,
                                    max: 1
                                };
    } else {
        // Item exists so it will be updated
        ++coll_[random_number].max;
    }
}

coll_.shift(); // See note below
console.log(coll_.toSource());
document.write(JSON.stringify(coll_));
var colluuu=[];
for(设i=0;i<10;i++){
随机数=数学楼层((数学随机()*3)+1);
//项不存在,因此将添加到数组中
如果(!coll_u[随机数]){
coll_u[随机数]={
id:随机数,
分:0,,
最高:1
};
}否则{
//项目已存在,因此将对其进行更新
++coll_u[随机数].max;
}
}
coll_.shift();//见下文注释
log(coll_.toSource());
document.write(JSON.stringify(coll_));

输出:

  • 控制台:
    [{id:1,min:0,max:4},{id:2,min:0,max:1},{id:3,min:0,max:5}]
  • 浏览器:
    [{“id”:1,“min”:0,“max”:4},{“id”:2,“min”:0,“max”:1},{“id”:3,“min”:0,“max”:5}]
关于
coll_uuu.shift()的注释


此语句删除
coll\u0
数组的第一个元素,即
coll\u0]
,其值为
undefined
。这是因为数组中的元素具有索引1、2和3。零索引处的元素由JS创建。

添加新项目时,您没有使用
随机数作为索引。
var coll_ = [];

for (let i = 0; i < 10; i++) {

    random_number = Math.floor((Math.random() * 3) + 1);

    // Item doesnt exist so will be added to the array
    if (!coll_[random_number]) {

        coll_[random_number] = {
                                    id: random_number,
                                    min: 0,
                                    max: 1
                                };
    } else {
        // Item exists so it will be updated
        ++coll_[random_number].max;
    }
}

coll_.shift(); // See note below
console.log(coll_.toSource());
document.write(JSON.stringify(coll_));