在Javascript中使用多功能数组

在Javascript中使用多功能数组,javascript,arrays,Javascript,Arrays,所有崩溃且无法运行的数据 运行的数据较少,但如果 console.log(`row ${g}, col ${i}`); console.log(obj[pastWinners]); 它表明它是未定义的 我在Javascript中有一个多维数组,它为我运行一些计算。这个数组被转换为对象文本,然后在一些数据操作之后,被更改为json对象,最后是字符串。这个节目效果很好 我必须在多维数组中再添加310行。当我这样做时,我得到了这个错误 index.html:331未捕获类型错误:无法读取的属性“0”

所有崩溃且无法运行的数据

运行的数据较少,但如果

console.log(`row ${g}, col ${i}`);
console.log(obj[pastWinners]);
它表明它是未定义的

我在
Javascript
中有一个多维数组,它为我运行一些计算。这个
数组
被转换为
对象文本
,然后在一些数据操作之后,被更改为
json对象
,最后是字符串。这个节目效果很好

我必须在多维数组中再添加310行。当我这样做时,我得到了这个错误

index.html:331未捕获类型错误:无法读取的属性“0” 未定义

原来的数组是这样的

var pastWinners = [
    [2, 9, 19, 23, 38, 40],
    [17, 25, 31, 35, 38, 43],
    [8, 10, 17, 30, 33, 43],
    [10, 17, 26, 28, 36, 43],
    [14, 20, 25, 28, 34, 41],
    [8, 13, 21, 23, 25, 43],
    [10, 11, 18, 24, 27, 30],
    [21, 22, 23, 26, 33, 39],
    [6, 21, 23, 29, 36, 40],
    [10, 12, 16, 21, 25, 42],
    [1, 11, 20, 27, 34, 37]
];
[05, 07, 17, 18, 33, 35], 
请注意,单个数字的十位数中没有0。但是新的数据看起来是这样的

var pastWinners = [
    [2, 9, 19, 23, 38, 40],
    [17, 25, 31, 35, 38, 43],
    [8, 10, 17, 30, 33, 43],
    [10, 17, 26, 28, 36, 43],
    [14, 20, 25, 28, 34, 41],
    [8, 13, 21, 23, 25, 43],
    [10, 11, 18, 24, 27, 30],
    [21, 22, 23, 26, 33, 39],
    [6, 21, 23, 29, 36, 40],
    [10, 12, 16, 21, 25, 42],
    [1, 11, 20, 27, 34, 37]
];
[05, 07, 17, 18, 33, 35], 
它确实在十位有一个0。我之所以提到这一点,是因为除了阵列的310多行之外,这是唯一的区别。我已经检查了50次数据,没有任何问题

这样的微小差异会导致这样的错误吗?它说错误是在我的程序的第331行被抛出

   var obj = {};

for (var g = 0; g < pastWinners.length; g++) {
    for (var i = 0, j = pastWinners.length; i < j; i++) {
        if (obj[pastWinners[g][i]] == undefined) {
            console.log(`row ${g}, col ${i}`);
            console.log(obj[pastWinners]);
        }
        if (obj[pastWinners[g][i]]) { //this is line 331
            obj[pastWinners[g][i]]++;
        } else {
            obj[pastWinners[g][i]] = 1;
        }
    }
}

var picks = [];
for (var numbs in obj) {
    picks.push([numbs, obj[numbs]])
    picks.sort(
        function(a, b) {
            return a[1] - b[1]
        }
    )
}

picks.reverse();
var topPicks = []

for (var winners = 0; winners < 6; winners++) {
    topPicks.push(picks[winners][0]);
}

var weekPicks = topPicks.toString();
console.log(weekPicks);
alert(weekPicks);

未定义时,请尝试在控制台中打印阵列,并在日志中检查阵列大小

for (var g = 0; g < pastWinners.length; g++) {
    for (var i = 0, j = pastWinners.length; i < j; i++) {
        if (obj[pastWinners[g][i]] == undefined){
         console.log(`row ${g}, col ${i}`);
         console.log(obj[pastWinners]);
        }
        if (obj[pastWinners[g][i]]) { //this is line 331
            obj[pastWinners[g][i]]++;
        } else {
            obj[pastWinners[g][i]] = 1;
        }
    }
}
for(var g=0;g
在未定义阵列时,尝试在控制台中打印阵列,并在日志中检查阵列大小

for (var g = 0; g < pastWinners.length; g++) {
    for (var i = 0, j = pastWinners.length; i < j; i++) {
        if (obj[pastWinners[g][i]] == undefined){
         console.log(`row ${g}, col ${i}`);
         console.log(obj[pastWinners]);
        }
        if (obj[pastWinners[g][i]]) { //this is line 331
            obj[pastWinners[g][i]]++;
        } else {
            obj[pastWinners[g][i]] = 1;
        }
    }
}
for(var g=0;g
我会采取不同的做法:

a。更改第二个循环

b。定义obj

var pastWinners = [
    [2, 9, 19, 23, 38, 40],
    [17, 25, 31, 35, 38, 43],
    [8, 10, 17, 30, 33, 43],
    [10, 17, 26, 28, 36, 43],
    [14, 20, 25, 28, 34, 41],
    [8, 13, 21, 23, 25, 43],
    [10, 11, 18, 24, 27, 30],
    [21, 22, 23, 26, 33, 39],
    [6, 21, 23, 29, 36, 40],
    [10, 12, 16, 21, 25, 42],
    [1, 11, 20, 27, 34, 37], 
];
var obj=[];
for (var g = 0; g < pastWinners.length; g++) {
    for (var i = 0; i < pastWinners[g].length; i++) {
        if (obj[pastWinners[g][i]]) { //this is line 331
            obj[pastWinners[g][i]]++;
        } else {
            obj[pastWinners[g][i]] = 1;
        }
    }
}

console.log(obj)
var=[
[2, 9, 19, 23, 38, 40],
[17, 25, 31, 35, 38, 43],
[8, 10, 17, 30, 33, 43],
[10, 17, 26, 28, 36, 43],
[14, 20, 25, 28, 34, 41],
[8, 13, 21, 23, 25, 43],
[10, 11, 18, 24, 27, 30],
[21, 22, 23, 26, 33, 39],
[6, 21, 23, 29, 36, 40],
[10, 12, 16, 21, 25, 42],
[1, 11, 20, 27, 34, 37], 
];
var-obj=[];
对于(var g=0;g<0.length;g++){
对于(变量i=0;i<0[g]。长度;i++){
if(obj[g][i]]){//这是第331行
obj[g][i]]++;
}否则{
obj[g][i]]=1;
}
}
}
控制台日志(obj)

我会采取不同的做法:

a。更改第二个循环

b。定义obj

var pastWinners = [
    [2, 9, 19, 23, 38, 40],
    [17, 25, 31, 35, 38, 43],
    [8, 10, 17, 30, 33, 43],
    [10, 17, 26, 28, 36, 43],
    [14, 20, 25, 28, 34, 41],
    [8, 13, 21, 23, 25, 43],
    [10, 11, 18, 24, 27, 30],
    [21, 22, 23, 26, 33, 39],
    [6, 21, 23, 29, 36, 40],
    [10, 12, 16, 21, 25, 42],
    [1, 11, 20, 27, 34, 37], 
];
var obj=[];
for (var g = 0; g < pastWinners.length; g++) {
    for (var i = 0; i < pastWinners[g].length; i++) {
        if (obj[pastWinners[g][i]]) { //this is line 331
            obj[pastWinners[g][i]]++;
        } else {
            obj[pastWinners[g][i]] = 1;
        }
    }
}

console.log(obj)
var=[
[2, 9, 19, 23, 38, 40],
[17, 25, 31, 35, 38, 43],
[8, 10, 17, 30, 33, 43],
[10, 17, 26, 28, 36, 43],
[14, 20, 25, 28, 34, 41],
[8, 13, 21, 23, 25, 43],
[10, 11, 18, 24, 27, 30],
[21, 22, 23, 26, 33, 39],
[6, 21, 23, 29, 36, 40],
[10, 12, 16, 21, 25, 42],
[1, 11, 20, 27, 34, 37], 
];
var-obj=[];
对于(var g=0;g<0.length;g++){
对于(变量i=0;i<0[g]。长度;i++){
if(obj[g][i]]){//这是第331行
obj[g][i]]++;
}否则{
obj[g][i]]=1;
}
}
}
控制台日志(obj)

在循环遍历[g]或尝试使用访问子数组之前,还应检查是否存在[g]

if([g]!=null){

原因是,如果由于某种原因未定义
pastWinners[g]
,则脚本将尝试执行以下操作:

undefined[i]
或从undefined中获取[i]的值——它不能这样做,因为undefined不是数组——这会破坏脚本

var=[
[2, 9, 19, 23, 38, 40],
[17, 25, 31, 35, 38, 43],
[8, 10, 17, 30, 33, 43],
[10, 17, 26, 28, 36, 43],
[14, 20, 25, 28, 34, 41],
[8, 13, 21, 23, 25, 43],
[10, 11, 18, 24, 27, 30],
[21, 22, 23, 26, 33, 39],
[6, 21, 23, 29, 36, 40],
[10, 12, 16, 21, 25, 42],
[1, 11, 20, 27, 34, 37],
];
对于(var g=0;g<0.length;g++){
如果(pastWinners[g]!=null){//检查有效项
对于(var i=0,j=0[g]。长度;iconsole.log(pastWinners);
此外,在循环使用它或尝试使用

if([g]!=null){

原因是,如果由于某种原因未定义
pastWinners[g]
,则脚本将尝试执行以下操作:

undefined[i]
或从undefined中获取[i]的值——它不能这样做,因为undefined不是数组——这会破坏脚本

var=[
[2, 9, 19, 23, 38, 40],
[17, 25, 31, 35, 38, 43],
[8, 10, 17, 30, 33, 43],
[10, 17, 26, 28, 36, 43],
[14, 20, 25, 28, 34, 41],
[8, 13, 21, 23, 25, 43],
[10, 11, 18, 24, 27, 30],
[21, 22, 23, 26, 33, 39],
[6, 21, 23, 29, 36, 40],
[10, 12, 16, 21, 25, 42],
[1, 11, 20, 27, 34, 37],
];
对于(var g=0;g<0.length;g++){
如果(pastWinners[g]!=null){//检查有效项
对于(var i=0,j=0[g]。长度;i