0

我想存储一个random看起来像1-2-3-4-5-6使用javascript array.

每个数据可能只包含-字符和从1到的 6 个唯一数字49

我将数组声明为:var a = new Array();

每次生成新数据时,我都会将其存储为:可能在a[data] = 1;哪里并表示比率;data2-36-33-21-9-411

如果生成的数据已经存在,我必须增加比率,例如:a[data]++;

为什么length房产不可用?

length每次生成新的唯一数据时,我都需要刷新页面上的值,可能每 1 毫秒刷新一次。

我不能这么快地解析一百万个数组……每次……

这就是我插入或更新的方式:

if (variante_unice[s]) {
                                variante_unice[s]++;
                            }
                            else
                            {
                                variante_unice[s] = 1;
                                variante_unice_total++;
                            }

编码:

    window.setInterval(
                            function() {
                                variante++;
                                $("#variante").text(variante);
                                for (j = 1; j <= 49; j++) {
                                    $("#v" + j).attr("class", "");
                                }
                                for (j = 1; j <= 49; j++) {
                                    extracted[j] = 0;
                                }
                                ind = 0;
                                s = '';
                                while (ind < 6) {
                                    r = Math.floor((Math.random() * 49) + 1);
                                    if (extracted[r] == 0) {
//this is where i generate the data
                                        if (s === '') {
                                            s = r;
                                        }
                                        else
                                        {
                                            s += '-' + r;
                                        }
                                        //console.log(r);
                                        extracted[r] = 1;
                                        frecvency[r]++;
                                        $("#n" + r).attr("class", "green");
                                        $("#v" + r).attr("class", "green");
                                        ind++;
                                        //console.log('i'+frecventa[r]);
                                        frecventa[r]++;
                                        //console.log('d'+frecventa[r]);
                                        $("#f" + r).text(frecventa[r]);
                                    }
                                }
//is the generated data new? if not, increment ratio
                                if (variante_unice[s]) {
                                    variante_unice[s]++;
                                }
                                else
                                {
                                    variante_unice[s] = 1;
                                    variante_unice_total++;
                                }
                                //console.log(variante_unice);
                                //console.log(variante_unice[s]);
                                //console.log(variante_unice.length);
                                //console.log(s);
                                verifica_varianta();
                                //console.log(extracted);
                                //console.log(frecvency);
                            }
                    , 1);
4

1 回答 1

4

如果您使用 向数组添加元素a["1-2-3-4-5-6"] = 1;,则实际上并不是将其附加到数组中,而是为对象创建了一个属性,即数组。您可以将任何属性添加到数组中,但除非您使用数字键 (0,1,2,3...),否则它不会计入长度属性。因此,您现在基本上有两种选择:

1)保持你的数据结构不变并自己计算长度:

如果你不需要你支持 IE8,你可以使用Object.keys(a).length,或者你写一个这样的辅助函数:

function computeLength(obj) {
    var result = 0;
    for (var i in obj) {
        result++;
    }
    return result;
}

如果您想使用其中一种方法,我还建议您声明一个对象而不是数组:var a = {};

2)使用适当的数组

在数组中,您没有键值对,而是索引值对。由于您想存储两个不同的值,您可以将这些值存储在一个对象中,并将该对象附加到您的数组中,从而生成一个对象数组:

var a = [];
a.push({data: data, counter: 1});

但是,使用此方法,您将无法再使用“1-2-3-4-5-6”字符串访问您的数据。如果要访问某个项目,则必须提供该项目在数组中的索引。

于 2013-07-28T16:12:27.333 回答