Sort 6 Discussions, By:

Sorry, you do not have a permission to answer to this question.

  • jenishrabadiya 9 years ago + 2 comments

    Below code worked fine where I declared for loop variable with the keyword var.

    for(var str of my_array){
        if(str == str.split('').reverse().join('')){
            console.log(str);
        }
    }
    

    but when I use let keyword it does not work

     for(let str of my_array){
        if(str == str.split('').reverse().join('')){
            console.log(str);
        }
    }
    

    What is the reason?

    Add Reply Preview cancel

    Sorry, you do not have a permission to answer to this question.

    • monzee 9 years ago + 2 comments

      'use strict'; is needed at the start of the enclosing block, but we don't have control over that since the code we submit is pasted in the middle of the actual script being executed by the server. Need to wrap it in a function, declare strict then call the function. Which is too much work, so just use var.


      EDIT: I'm wrong, you can just add 'use strict'; at the top. Maybe the submission is being enclosed in a function.

      Add Reply Preview cancel

      Sorry, you do not have a permission to answer to this question.

      • [deleted] 9 years ago + 2 comments

        Try adding "use strict" at top of your second code.

        "use strict"
        for(let str of my_array){
            if(str === str.split('').reverse().join('')){
                console.log(str);
            }
        }
        

        You can learn more about "use strict" here

        Add Reply Preview cancel

        Sorry, you do not have a permission to answer to this question.

        • jenishrabadiya 9 years ago + 0 comments

          Thanks!

          Add Reply Preview cancel

          Sorry, you do not have a permission to answer to this question.

          • karuna24s 9 years ago + 0 comments

            When I click on the link mdn says not found. Do you recommend another resource?

            Add Reply Preview cancel

            Sorry, you do not have a permission to answer to this question.

          • jenishrabadiya 9 years ago + 0 comments

            thanks! that helped me understand correctly. :)

            Add Reply Preview cancel

            Sorry, you do not have a permission to answer to this question.

          • Odiumediae 9 years ago + 1 comment

            -- edited -- I removed my comment, to avoid confusion among newbies.

            Add Reply Preview cancel

            Sorry, you do not have a permission to answer to this question.

            • jenishrabadiya 9 years ago + 1 comment

              I wrapped it inside the function but it did not work. we need to write "use strict" in order to make it work.

              Add Reply Preview cancel

              Sorry, you do not have a permission to answer to this question.

              • Odiumediae 9 years ago + 0 comments

                +1 I'm sorry, you're right, I even did that myself. I've mixed that up with something else. Thanks to DOSHI.

                Add Reply Preview cancel

                Sorry, you do not have a permission to answer to this question.

          • [deleted] 9 years ago + 3 comments

            BONUS CHALLENGE

            Gratz! If you have solved this challenge.

            But

            Can you try solving this using filter and for ... of?

            Add Reply Preview cancel

            Sorry, you do not have a permission to answer to this question.

            • MikeLDJ 9 years ago + 1 comment

              This can't be solved... not for the begginers.

              Add Reply Preview cancel

              Sorry, you do not have a permission to answer to this question.

              • wzaccone64 9 years ago + 1 comment

                compare each character at the beginning of the string against each character at the end of the string, and move the beginning and ending indexes as long as it is still a paladrum or until the indices meet each other.

                 for(var str of my_array){
                   var ldx = str.length - 1;
                   var pala = true;
                   var idx = 0;
                   while ((pala) && (idx < str.length) && (idx != ldx)) 
                      if (str[idx++] != str[ldx--]) pala = false;
                   if (pala) console.log(str);
                 }
                

                Add Reply Preview cancel

                Sorry, you do not have a permission to answer to this question.

                • givonz 9 years ago + 0 comments

                  imho, this is far more intuitive, than using the reverse function. personally, i built a reverse of the string with a concat from the end. then compare the two strings.

                  Add Reply Preview cancel

                  Sorry, you do not have a permission to answer to this question.

              • MistaTwist 9 years ago + 1 comment

                //Would something like this work?

                "use strict"

                function isPalindrome(str) { return str === str.split('').reverse().join(''); }

                var palindromes = my_array.filter(isPalindrome);

                for(let pal of palindromes){ console.log(pal); }

                Add Reply Preview cancel

                Sorry, you do not have a permission to answer to this question.

                • [deleted] 9 years ago + 3 comments

                  Great @MistaTwist, nicely done!! :)

                  We can make our code more crisp, using arrow functions.

                  "use strict"
                  for(let palindrome of my_array.filter(str => str === str.split('').reverse().join('')))
                      console.log(palindrome)
                  

                  Add Reply Preview cancel

                  Sorry, you do not have a permission to answer to this question.

                  • MistaTwist 9 years ago + 0 comments

                    Ah yes, of course ;) Thanks!

                    Add Reply Preview cancel

                    Sorry, you do not have a permission to answer to this question.

                    • MistaTwist 9 years ago + 0 comments

                      One question though - what's the ideal use of arrow functions, with regards to reuse of functions?

                      Let's say I wanted to use isPalindrome elsewhere - could I just call isPalindrome(str) in the arrow function like this:

                      //assume my function is defined ok

                      for(let palindrome of my_array.filter(str => isPalindrome(str)){ console.log(palindrome); }

                      Thanks :)

                      Add Reply Preview cancel

                      Sorry, you do not have a permission to answer to this question.

                      • jonmcclung 9 years ago + 0 comments

                        This is what I did (except the "use strict", I don't know what that means) and this contest is the first experience I have with Javascript!

                        Add Reply Preview cancel

                        Sorry, you do not have a permission to answer to this question.

                    • JChiquin 7 years ago + 0 comments

                      One-liner solution:

                      console.log(my_array.filter(a=>a==a.split('').reverse().join('')).join('\n'));
                      

                      Add Reply Preview cancel

                      Sorry, you do not have a permission to answer to this question.

                    • varadghatage7 2 years ago + 0 comments

                      'use strict'; for(let i of my_array){ let s = i.split('').reverse().join('') if(s === i){ console.log(i); } }

                      Add Reply Preview cancel

                      Sorry, you do not have a permission to answer to this question.

                      • ameyb2018 6 years ago + 0 comments

                        var len = my_array.length;
                        var res="";
                        var ori="";
                        for(let i of my_array)
                            {
                                ori = i;
                                res = i.split("").reverse().join("");
                                if(i==res)
                                    {
                                        console.log(i);
                                    }
                            }
                        

                        Add Reply Preview cancel

                        Sorry, you do not have a permission to answer to this question.

                        • tgamerkle 9 years ago + 0 comments

                          for bonus points write it all on one line:

                          'use strict';
                          
                          for (let i of my_array) if (i.split("").reverse().join("") == i) console.log(i);```
                          

                          Add Reply Preview cancel

                          Sorry, you do not have a permission to answer to this question.

                          1. Challenge Walkthrough
                            Let's walk through this sample challenge and explore the features of the code editor.1 of 6
                          2. Review the problem statement
                            Each challenge has a problem statement that includes sample inputs and outputs. Some challenges include additional information to help you out.2 of 6
                          3. Choose a language
                            Select the language you wish to use to solve this challenge.3 of 6
                          4. Enter your code
                            Code your solution in our custom editor or code in your own environment and upload your solution as a file.4 of 6
                          5. Test your code
                            You can compile your code and test it for errors and accuracy before submitting.5 of 6
                          6. Submit to see results
                            When you're ready, submit your solution! Remember, you can go back and refine your code anytime.6 of 6
                          1. Check your score