How to iterate through an array of arrays while using an expression within the indices












2















When I run the below JavaScript code the first two lines of output are:



5
undefined


Why is the second output line undefined and not 5? Here is the code:






matrix = [
[2, 5, 7],
[4, 6, 1],
[7, 3, 9]
];
for (var i in matrix) {
for (var j in matrix[i]) {
console.log(matrix[0][0 + 1]);
console.log(matrix[i][j + 1]);
}
}












share|improve this question




















  • 5





    Don't use for...in with arrays, it hould be used with objects, in your code both i and j are strings, so j + 1 will not be what you expect it to be. It also loops the array out of order

    – ibrahim mahrir
    Jan 2 at 2:41













  • Because j is the string "0". "0" + 1 is "01", not 1. Related: Javascript - For Loop key undefined ONLY for 1st iteration?.

    – Xufox
    Jan 2 at 2:43








  • 1





    It’s also explained here, in Why is using “for…in” with array iteration a bad idea?.

    – Xufox
    Jan 2 at 2:52











  • @Xufox The link you shared solved the problem. Thanks...

    – okcapp
    Jan 2 at 3:09
















2















When I run the below JavaScript code the first two lines of output are:



5
undefined


Why is the second output line undefined and not 5? Here is the code:






matrix = [
[2, 5, 7],
[4, 6, 1],
[7, 3, 9]
];
for (var i in matrix) {
for (var j in matrix[i]) {
console.log(matrix[0][0 + 1]);
console.log(matrix[i][j + 1]);
}
}












share|improve this question




















  • 5





    Don't use for...in with arrays, it hould be used with objects, in your code both i and j are strings, so j + 1 will not be what you expect it to be. It also loops the array out of order

    – ibrahim mahrir
    Jan 2 at 2:41













  • Because j is the string "0". "0" + 1 is "01", not 1. Related: Javascript - For Loop key undefined ONLY for 1st iteration?.

    – Xufox
    Jan 2 at 2:43








  • 1





    It’s also explained here, in Why is using “for…in” with array iteration a bad idea?.

    – Xufox
    Jan 2 at 2:52











  • @Xufox The link you shared solved the problem. Thanks...

    – okcapp
    Jan 2 at 3:09














2












2








2








When I run the below JavaScript code the first two lines of output are:



5
undefined


Why is the second output line undefined and not 5? Here is the code:






matrix = [
[2, 5, 7],
[4, 6, 1],
[7, 3, 9]
];
for (var i in matrix) {
for (var j in matrix[i]) {
console.log(matrix[0][0 + 1]);
console.log(matrix[i][j + 1]);
}
}












share|improve this question
















When I run the below JavaScript code the first two lines of output are:



5
undefined


Why is the second output line undefined and not 5? Here is the code:






matrix = [
[2, 5, 7],
[4, 6, 1],
[7, 3, 9]
];
for (var i in matrix) {
for (var j in matrix[i]) {
console.log(matrix[0][0 + 1]);
console.log(matrix[i][j + 1]);
}
}








matrix = [
[2, 5, 7],
[4, 6, 1],
[7, 3, 9]
];
for (var i in matrix) {
for (var j in matrix[i]) {
console.log(matrix[0][0 + 1]);
console.log(matrix[i][j + 1]);
}
}





matrix = [
[2, 5, 7],
[4, 6, 1],
[7, 3, 9]
];
for (var i in matrix) {
for (var j in matrix[i]) {
console.log(matrix[0][0 + 1]);
console.log(matrix[i][j + 1]);
}
}






javascript






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Jan 2 at 4:58









Jack Bashford

11.7k31846




11.7k31846










asked Jan 2 at 2:37









okcappokcapp

132212




132212








  • 5





    Don't use for...in with arrays, it hould be used with objects, in your code both i and j are strings, so j + 1 will not be what you expect it to be. It also loops the array out of order

    – ibrahim mahrir
    Jan 2 at 2:41













  • Because j is the string "0". "0" + 1 is "01", not 1. Related: Javascript - For Loop key undefined ONLY for 1st iteration?.

    – Xufox
    Jan 2 at 2:43








  • 1





    It’s also explained here, in Why is using “for…in” with array iteration a bad idea?.

    – Xufox
    Jan 2 at 2:52











  • @Xufox The link you shared solved the problem. Thanks...

    – okcapp
    Jan 2 at 3:09














  • 5





    Don't use for...in with arrays, it hould be used with objects, in your code both i and j are strings, so j + 1 will not be what you expect it to be. It also loops the array out of order

    – ibrahim mahrir
    Jan 2 at 2:41













  • Because j is the string "0". "0" + 1 is "01", not 1. Related: Javascript - For Loop key undefined ONLY for 1st iteration?.

    – Xufox
    Jan 2 at 2:43








  • 1





    It’s also explained here, in Why is using “for…in” with array iteration a bad idea?.

    – Xufox
    Jan 2 at 2:52











  • @Xufox The link you shared solved the problem. Thanks...

    – okcapp
    Jan 2 at 3:09








5




5





Don't use for...in with arrays, it hould be used with objects, in your code both i and j are strings, so j + 1 will not be what you expect it to be. It also loops the array out of order

– ibrahim mahrir
Jan 2 at 2:41







Don't use for...in with arrays, it hould be used with objects, in your code both i and j are strings, so j + 1 will not be what you expect it to be. It also loops the array out of order

– ibrahim mahrir
Jan 2 at 2:41















Because j is the string "0". "0" + 1 is "01", not 1. Related: Javascript - For Loop key undefined ONLY for 1st iteration?.

– Xufox
Jan 2 at 2:43







Because j is the string "0". "0" + 1 is "01", not 1. Related: Javascript - For Loop key undefined ONLY for 1st iteration?.

– Xufox
Jan 2 at 2:43






1




1





It’s also explained here, in Why is using “for…in” with array iteration a bad idea?.

– Xufox
Jan 2 at 2:52





It’s also explained here, in Why is using “for…in” with array iteration a bad idea?.

– Xufox
Jan 2 at 2:52













@Xufox The link you shared solved the problem. Thanks...

– okcapp
Jan 2 at 3:09





@Xufox The link you shared solved the problem. Thanks...

– okcapp
Jan 2 at 3:09












2 Answers
2






active

oldest

votes


















0














oNot sure why you are trying to +1. This is causing your issue.
Also included array.forEach of this as well.



Included fix based on Ibrahim comment






matrix = [[2, 5, 7], [4, 6, 1], [7, 3, 9]];
for(let i of matrix){
for(let j of i){
console.log(j);
}
}

matrix.forEach(m => {
m.forEach(e => console.log(e));
});








share|improve this answer































    0














    You have to cast your j variable to integer using Number() function.






    matrix = [
    [2, 5, 7],
    [4, 6, 1],
    [7, 3, 9]
    ];
    for (var i in matrix) {
    for (var j in matrix[i]) {
    console.log(matrix[0][0 + 1]);
    console.log(matrix[i][Number(j) + 1]);
    }
    }








    share|improve this answer























      Your Answer






      StackExchange.ifUsing("editor", function () {
      StackExchange.using("externalEditor", function () {
      StackExchange.using("snippets", function () {
      StackExchange.snippets.init();
      });
      });
      }, "code-snippets");

      StackExchange.ready(function() {
      var channelOptions = {
      tags: "".split(" "),
      id: "1"
      };
      initTagRenderer("".split(" "), "".split(" "), channelOptions);

      StackExchange.using("externalEditor", function() {
      // Have to fire editor after snippets, if snippets enabled
      if (StackExchange.settings.snippets.snippetsEnabled) {
      StackExchange.using("snippets", function() {
      createEditor();
      });
      }
      else {
      createEditor();
      }
      });

      function createEditor() {
      StackExchange.prepareEditor({
      heartbeatType: 'answer',
      autoActivateHeartbeat: false,
      convertImagesToLinks: true,
      noModals: true,
      showLowRepImageUploadWarning: true,
      reputationToPostImages: 10,
      bindNavPrevention: true,
      postfix: "",
      imageUploader: {
      brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
      contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
      allowUrls: true
      },
      onDemand: true,
      discardSelector: ".discard-answer"
      ,immediatelyShowMarkdownHelp:true
      });


      }
      });














      draft saved

      draft discarded


















      StackExchange.ready(
      function () {
      StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f54000617%2fhow-to-iterate-through-an-array-of-arrays-while-using-an-expression-within-the-i%23new-answer', 'question_page');
      }
      );

      Post as a guest















      Required, but never shown

























      2 Answers
      2






      active

      oldest

      votes








      2 Answers
      2






      active

      oldest

      votes









      active

      oldest

      votes






      active

      oldest

      votes









      0














      oNot sure why you are trying to +1. This is causing your issue.
      Also included array.forEach of this as well.



      Included fix based on Ibrahim comment






      matrix = [[2, 5, 7], [4, 6, 1], [7, 3, 9]];
      for(let i of matrix){
      for(let j of i){
      console.log(j);
      }
      }

      matrix.forEach(m => {
      m.forEach(e => console.log(e));
      });








      share|improve this answer




























        0














        oNot sure why you are trying to +1. This is causing your issue.
        Also included array.forEach of this as well.



        Included fix based on Ibrahim comment






        matrix = [[2, 5, 7], [4, 6, 1], [7, 3, 9]];
        for(let i of matrix){
        for(let j of i){
        console.log(j);
        }
        }

        matrix.forEach(m => {
        m.forEach(e => console.log(e));
        });








        share|improve this answer


























          0












          0








          0







          oNot sure why you are trying to +1. This is causing your issue.
          Also included array.forEach of this as well.



          Included fix based on Ibrahim comment






          matrix = [[2, 5, 7], [4, 6, 1], [7, 3, 9]];
          for(let i of matrix){
          for(let j of i){
          console.log(j);
          }
          }

          matrix.forEach(m => {
          m.forEach(e => console.log(e));
          });








          share|improve this answer













          oNot sure why you are trying to +1. This is causing your issue.
          Also included array.forEach of this as well.



          Included fix based on Ibrahim comment






          matrix = [[2, 5, 7], [4, 6, 1], [7, 3, 9]];
          for(let i of matrix){
          for(let j of i){
          console.log(j);
          }
          }

          matrix.forEach(m => {
          m.forEach(e => console.log(e));
          });








          matrix = [[2, 5, 7], [4, 6, 1], [7, 3, 9]];
          for(let i of matrix){
          for(let j of i){
          console.log(j);
          }
          }

          matrix.forEach(m => {
          m.forEach(e => console.log(e));
          });





          matrix = [[2, 5, 7], [4, 6, 1], [7, 3, 9]];
          for(let i of matrix){
          for(let j of i){
          console.log(j);
          }
          }

          matrix.forEach(m => {
          m.forEach(e => console.log(e));
          });






          share|improve this answer












          share|improve this answer



          share|improve this answer










          answered Jan 2 at 2:41









          BibbertyBibberty

          1,9431315




          1,9431315

























              0














              You have to cast your j variable to integer using Number() function.






              matrix = [
              [2, 5, 7],
              [4, 6, 1],
              [7, 3, 9]
              ];
              for (var i in matrix) {
              for (var j in matrix[i]) {
              console.log(matrix[0][0 + 1]);
              console.log(matrix[i][Number(j) + 1]);
              }
              }








              share|improve this answer




























                0














                You have to cast your j variable to integer using Number() function.






                matrix = [
                [2, 5, 7],
                [4, 6, 1],
                [7, 3, 9]
                ];
                for (var i in matrix) {
                for (var j in matrix[i]) {
                console.log(matrix[0][0 + 1]);
                console.log(matrix[i][Number(j) + 1]);
                }
                }








                share|improve this answer


























                  0












                  0








                  0







                  You have to cast your j variable to integer using Number() function.






                  matrix = [
                  [2, 5, 7],
                  [4, 6, 1],
                  [7, 3, 9]
                  ];
                  for (var i in matrix) {
                  for (var j in matrix[i]) {
                  console.log(matrix[0][0 + 1]);
                  console.log(matrix[i][Number(j) + 1]);
                  }
                  }








                  share|improve this answer













                  You have to cast your j variable to integer using Number() function.






                  matrix = [
                  [2, 5, 7],
                  [4, 6, 1],
                  [7, 3, 9]
                  ];
                  for (var i in matrix) {
                  for (var j in matrix[i]) {
                  console.log(matrix[0][0 + 1]);
                  console.log(matrix[i][Number(j) + 1]);
                  }
                  }








                  matrix = [
                  [2, 5, 7],
                  [4, 6, 1],
                  [7, 3, 9]
                  ];
                  for (var i in matrix) {
                  for (var j in matrix[i]) {
                  console.log(matrix[0][0 + 1]);
                  console.log(matrix[i][Number(j) + 1]);
                  }
                  }





                  matrix = [
                  [2, 5, 7],
                  [4, 6, 1],
                  [7, 3, 9]
                  ];
                  for (var i in matrix) {
                  for (var j in matrix[i]) {
                  console.log(matrix[0][0 + 1]);
                  console.log(matrix[i][Number(j) + 1]);
                  }
                  }






                  share|improve this answer












                  share|improve this answer



                  share|improve this answer










                  answered Jan 2 at 5:20









                  RAGINROSERAGINROSE

                  1678




                  1678






























                      draft saved

                      draft discarded




















































                      Thanks for contributing an answer to Stack Overflow!


                      • Please be sure to answer the question. Provide details and share your research!

                      But avoid



                      • Asking for help, clarification, or responding to other answers.

                      • Making statements based on opinion; back them up with references or personal experience.


                      To learn more, see our tips on writing great answers.




                      draft saved


                      draft discarded














                      StackExchange.ready(
                      function () {
                      StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f54000617%2fhow-to-iterate-through-an-array-of-arrays-while-using-an-expression-within-the-i%23new-answer', 'question_page');
                      }
                      );

                      Post as a guest















                      Required, but never shown





















































                      Required, but never shown














                      Required, but never shown












                      Required, but never shown







                      Required, but never shown

































                      Required, but never shown














                      Required, but never shown












                      Required, but never shown







                      Required, but never shown







                      Popular posts from this blog

                      Can a sorcerer learn a 5th-level spell early by creating spell slots using the Font of Magic feature?

                      Does disintegrating a polymorphed enemy still kill it after the 2018 errata?

                      A Topological Invariant for $pi_3(U(n))$