javascript二维数组未返回正确的值

javascript二维数组未返回正确的值,javascript,arrays,multidimensional-array,Javascript,Arrays,Multidimensional Array,我正在测试一款石头纸剪刀蜥蜴斯波克游戏。我没有生成可能的结果,而是使用var-matrix=[]来捕获所有的可能性。在数组位置矩阵[3,0],输入的字符串是“rock wins”。然而,我在数组之后运行了console.log(矩阵[3,0]),它产生了一个不同的结果 有人能告诉我为什么吗 var matrix = []; matrix[0,0] = "it's a tie"; matrix[0,1] = "Paper wins"; matrix[0,2] = "rock wins"; mat

我正在测试一款石头纸剪刀蜥蜴斯波克游戏。我没有生成可能的结果,而是使用
var-matrix=[]
来捕获所有的可能性。在数组位置
矩阵[3,0]
,输入的字符串是“rock wins”。然而,我在数组之后运行了
console.log(矩阵[3,0])
,它产生了一个不同的结果

有人能告诉我为什么吗

var matrix = [];

matrix[0,0] = "it's a tie";
matrix[0,1] = "Paper wins";
matrix[0,2] = "rock wins";
matrix[0,3] = "rock wins";
matrix[0,4] = "Spock wins";
matrix[1,0] = "Paper wins";
matrix[1,1] = "it's a tie";
matrix[1,2] = "Scissors win";
matrix[1,3] = "Lizard wins";
matrix[1,4] = "Paper wins";
matrix[2,0] = "rock wins";
matrix[2,1] = "Scissors win";
matrix[2,2] = "it's a tie";
matrix[2,3] = "Scissors win";
matrix[2,4] = "spock wins";
matrix[3,0] = "rock wins";

log.console(matrix[3,0]); //returns spock wins 

不,没有。它实际上返回“摇滚乐赢”。
简而言之,您使用了错误的语法

为什么会这样? 如果您对理解JavaScript的神奇行为不感兴趣,您可能会错过这一部分,直接转到“应该是什么样子?”

  • 您已经声明了一个一维数组
  • 当您尝试分配或读取以下属性
    矩阵[0,0]
    时,
    0,0
    被识别为一个表达式,其计算结果为最后一个数字(在本例中为0)
  • 意思是

    matrix[0,0] = "it's a tie";
    matrix[0,1] = "Paper wins";
    matrix[0,2] = "rock wins";
    // ...
    matrix[2,3] = "Scissors win";
    matrix[2,4] = "spock wins";
    matrix[3,0] = "rock wins";
    console.log(matrix[3,0]);
    

    matrix[0] = "it's a tie";
    matrix[1] = "Paper wins";
    matrix[2] = "rock wins";
    // ...
    matrix[3] = "Scissors win";
    matrix[4] = "spock wins";
    matrix[0] = "rock wins";
    console.log(matrix[0]); // returns "rock wins"
    
    阅读更多关于它的信息

    原因是您使用了错误的语法

    应该怎样? 这就是在JavaScript中访问多维数组中的值的方式:

    var val = arr[key1][key2][key3]; // not arr[key1, key2, key3]
    
    您的代码应该是这样的:

    var矩阵=[];
    对于(var i=0;i<4;i++)矩阵[i]=[];
    矩阵[0][0]=“这是一个平局”;
    矩阵[0][1]=“纸赢”;
    矩阵[0][2]=“摇滚乐获胜”;
    // ...
    矩阵[2][3]=“剪刀赢”;
    矩阵[2][4]=“斯波克获胜”;
    矩阵[3][0]=“摇滚乐获胜”;
    编写(矩阵[3][0]);//代码中不包含矩阵[3,0]

    matrix[0,0] = "it's a tie";
    
    方括号中的部分是一个表达式,它被计算并强制为字符串。表达式
    0,0
    返回最后一个“,”之后的值,计算结果为
    0
    0,1
    计算结果为1,依此类推

    因此:

    创建分配给每个索引的最后一个值的“一维”数组:

    ["rock wins", "Scissors win", "it's a tie", "Scissors win", "spock wins"]
    

    评估为

    matrix[0]
    
    因此你会得到“摇滚乐赢”

    你想要的是:

    var matrix = [[],[],[],[]];
    
    matrix[0][0] = "it's a tie";
    matrix[0][1] = "Paper wins";
    matrix[0][2] = "rock wins";
    matrix[0][3] = "rock wins";
    matrix[0][4] = "Spock wins";
    matrix[1][0] = "Paper wins";
    matrix[1][1] = "it's a tie";
    matrix[1][2] = "Scissors win";
    matrix[1][3] = "Lizard wins";
    matrix[1][4] = "Paper wins";
    matrix[2][0] = "rock wins";
    matrix[2][1] = "Scissors win";
    matrix[2][2] = "it's a tie";
    matrix[2][3] = "Scissors win";
    matrix[2][4] = "spock wins";
    matrix[3][0] = "rock wins";
    
    console.log(matrix[3][0]); // rock wins
    
    您还可以使用数组文字:

    var matrix = [
                  ["it's a tie","Paper wins","rock wins","rock wins","Spock wins"],
                  ["Paper wins","it's a tie","Scissors win","Lizard wins","Paper wins"],
                  ["rock wins","Scissors win","it's a tie","Scissors win","spock wins"],
                  ["rock wins"]
                 ];
    

    很难对我们看不到的代码进行评论…
    matrix[3,0]
    没有按照您的想法进行操作,请尝试
    matrix[3][0]
    var matrix = [[],[],[],[]];
    
    matrix[0][0] = "it's a tie";
    matrix[0][1] = "Paper wins";
    matrix[0][2] = "rock wins";
    matrix[0][3] = "rock wins";
    matrix[0][4] = "Spock wins";
    matrix[1][0] = "Paper wins";
    matrix[1][1] = "it's a tie";
    matrix[1][2] = "Scissors win";
    matrix[1][3] = "Lizard wins";
    matrix[1][4] = "Paper wins";
    matrix[2][0] = "rock wins";
    matrix[2][1] = "Scissors win";
    matrix[2][2] = "it's a tie";
    matrix[2][3] = "Scissors win";
    matrix[2][4] = "spock wins";
    matrix[3][0] = "rock wins";
    
    console.log(matrix[3][0]); // rock wins
    
    var matrix = [
                  ["it's a tie","Paper wins","rock wins","rock wins","Spock wins"],
                  ["Paper wins","it's a tie","Scissors win","Lizard wins","Paper wins"],
                  ["rock wins","Scissors win","it's a tie","Scissors win","spock wins"],
                  ["rock wins"]
                 ];