为什么这个2d数组不应该推送值?

时间:2015-07-16 20:22:53

标签: javascript arrays

编辑:感谢指出我在内循环中重置tempRndNumber的错误。 我仍然看到“,”字符出现在数组中。

我想创建一个仅在随机数符合特定条件(rnd> = 7)时才会填充的二维数组。但是下面的代码使用“,”和符合条件的数字组合填充了2d数组。

var tempAllRndNumbers = [];
    for (var i = 0; i < 10; i++) {
        for (var j = 0; j < 10; j++) {
            var tempRndNumber = [];
            var rndNumber = Math.floor(Math.random() * 10);
            if (rndNumber >= 7) {
                tempRndNumber.push(rndNumber);
            }
        }
        tempAllRndNumbers.push(tempRndNumber);
    }

tempAllRndNumbers只能填充数字7及以上,对吗?但相反,我得到一个装满“,”和数字7及以上的二维数组。

3 个答案:

答案 0 :(得分:1)

我认为你不想像你一样在内循环的每次迭代中重置tempRndNumber。试试这个:

                    var tempAllRndNumbers = [];
                    for (var i = 0; i < 10; i++) {
                        var tempRndNumber = [];
                        for (var j = 0; j < 10; j++) {
                            var rndNumber = Math.floor(Math.random() * 10);
                            if (rndNumber >= 7) {
                                tempRndNumber.push(rndNumber);
                            }
                        }
                        tempAllRndNumbers.push(tempRndNumber);
                    }

更新: 您必须循环回两个数组以获得正确的输出,请参见此处:

http://jsfiddle.net/jessikwa/1fbq0woo/

答案 1 :(得分:1)

由于在j循环的每次迭代中将var tempAllRndNumbers = []; for (var i = 0; i < 10; i++) { var tempRndNumber = []; for (var j = 0; j < 10; { var rndNumber = Math.floor(Math.random() * 10); if (rndNumber >= 7) { tempRndNumber.push(rndNumber); } } tempAllRndNumbers.push(tempRndNumber); } 重置为空数组,如果最后一次迭代为> = 7,则只包含一个数字。将初始化移到最里面的内部循环:

bind()

答案 2 :(得分:1)

您没有检查tempRndNumber数组是否有任何值,因此您将空数组推入数组tempAllRndNumbers。这就是为什么你有',',你有没有值的索引。