Як Перабярыце алфавіту праз underscoreJS

Я выкарыстоўваю метад Underscore ў шаблоне() у паданнях BackboneJS. Я хацеў бы паказаць спіс літар алфавіту, на мой погляд, каб адсартаваць калекцыю па літарах.

У выніку, у мяне ёсць спіс з 26 спасылак (адна спасылка = адна літара) на мой погляд. Замест капіявання ўстаўкі кожнай спасылкі (што вельмі дрэнна для кода рамонтапрыдатнасць), мне было цікава, калі б можна было перабраць алфавіту праз underscoreJS.

<�Моцны> Вынік для адлюстравання:

  • a
  • 
    
  • b
  • 
    
  • c
  • ...
    
  • z
  • 
    
    
    13

    8 адказы

    var alphabet = "abcdefghijklmnopqrstuvwxyz".split("");
    _.each(alphabet, function(letter) {
      console.log(letter);
    });
    

    Вось як можна гэта зрабіць.

    39
    дададзена
    1. Create a range with the charcodes

      var alphas = _.range(
          'a'.charCodeAt(0),
          'z'.charCodeAt(0)+1
      ); 
      // [97 .. 122]
      
    2. Create an array with the letters

      var letters = _.map(alphas, a => String.fromCharCode(a));
      // see @deefour comment
      
      // Non ES6 version
      // var letters = _.map(alphas, function(a) {
      //    return String.fromCharCode(a);
      // });
      
      // [a .. z]
      
    3. Inject into your template

      var tpl = 
      '
        '+ '<% _.each(letters, function(letter) { %>'+ '
      • <%= letter %>
      • '+ '<% }); %>'+ '
      ';
      var compiled = _.template(tpl);
      var html = compiled({letters : letters});
      

    And a demo http://jsfiddle.net/hPdSQ/17/

    <div class="snippet" data-lang="js" data-hide="true" data-console="false" data-babel="false"> <div class="snippet-code snippet-currently-hidden">

    var alphas = _.range(
        'a'.charCodeAt(0),
        'z'.charCodeAt(0)+1
    ); 
    
    var letters = _.map(alphas, a => String.fromCharCode(a));
    
    var tpl = 
    '
      '+ '<% _.each(letters, function(letter) { %>'+ '
    • <%= letter %>
    • '+ '<% }); %>'+ '
    ';
    var compiled = _.template(tpl);
    
    var html = compiled({letters : letters});
    
    document.getElementById('res').innerHTML = html;
    <script src="http://underscorejs.org/underscore-min.js"></script>
    <div id='res'></div>
    </div> </div>
    11
    дададзена
    Майце на ўвазе, што адлюстраванне над альфы у гэты адказ робіць не вяртае масіў зыходных сімвалаў, "а", "б", "в", .. . . Вы замест гэтага атрымаеце Юнікода радкі тыпу "а \ u0001 \ u0000", "б \ u0001 \ u0000", "C \ u0001 \ u0000", ... . Замест гэтага вы павінны выкарыстоўваць функцыю стрэлкі, як а => String.fromCharCode (а) , каб прайсці першы аргумент ( fromCharCode прымае адвольны лік аргументаў, у выніку чаго ўсё астатняе lodash пераходзіць да карта зваротны выклік павінен быць ператвораны ў нулявых значэнняў, паказаных вышэй).
    дададзена аўтар deefour, крыніца
    @deefour Дзякуй за выпраўленне
    дададзена аўтар nikoshr, крыніца
    for(var letter=65;letter<91;letter++)
    {
    var _char = String.fromCharCode(letter);
    console.log(_char);
    }
    

    або выкарыстаць ад 97 - 123 ASCII кода для малых літар

    4
    дададзена
    Палепшаная версія: stackoverflow.com/a/42718084/4829915
    дададзена аўтар LWC, крыніца

    <div class="snippet" data-lang="js" data-hide="false" data-console="true" data-babel="false"> <div class="snippet-code">

    for (var i = 'a'.charCodeAt(0); i <= 'z'.charCodeAt(0); i++) {
      console.log(String.fromCharCode(i));
    }
    </div> </div>
    2
    дададзена
    Што такое выкарыстанне charCodeAt (0) concatted да пачатковага і канчатковым індэксах?
    дададзена аўтар HoldOffHunger, крыніца
    Добра, так, ператварэнне зараз, гэта выглядае правільна; гэта можа быць трохі павольней, чым Мидо Мидо, але гэта крыху больш зручным для чытання.
    дададзена аўтар HoldOffHunger, крыніца
    Проста для атрымання кода асмаленага
    дададзена аўтар Artemius Pompilius, крыніца

    Выкарыстанне ES6 для Арганізацыі :

    <div class="snippet" data-lang="js" data-hide="false" data-console="true" data-babel="false"> <div class="snippet-code">

    for( char of "abcdefghijklmnopqrstuvwxyz" ){
      console.log(char);//prints 'a' to 'z'
    }
    </div> </div>

    Даволі простая ў выкарыстанні, што ў шаблоне, і вы можаце выкарыстоўваць Бабель , transpile яго код для браўзэраў, якія не маюць падтрымкі што сінтаксіс.

    0
    дададзена
    Калі-небудзь дурныя пытанні, атрымаць лепшыя адказы, якія не даюць адказу на спецыфіку пытанняў, але зрабіць гэта за паняцце пытання.
    дададзена аўтар vsync, крыніца
    Вы не адказалі на гэтае пытанне непасрэдна аб пазваночніку або падкрэсленнем, але дапамог мне, тым не менш, так як я знаходжуся ў ES6 +. Дзякуючы.
    дададзена аўтар staylorx, крыніца

    Вось палепшаная версія * чыстага код JS @Medo Мід у:

    <div class="snippet" data-lang="js" data-hide="false" data-console="true" data-babel="false"> <div class="snippet-code">

        var letters=[], letter_first = 'a', letter_last = 'z'//you can also use A and Z
        for (var letter=letter_first.charCodeAt(0);letter<=letter_last.charCodeAt(0);letter++)
          letters.push(String.fromCharCode(letter))
        document.write(letters.join(''))
    </div> </div>
    • Выпраўленая памылка "вар" дэкларацыя
    • дададзена вызначэнне прамога лісты
    • <�Літый> Сабраны вынік у масіў для таго, каб мець толькі адно выйсце
    • Зроблена код працаздольнай тут
    0
    дададзена
    Зыходны код: stackoverflow.com/a/34781278/4829915
    дададзена аўтар LWC, крыніца

    Выкарыстанне underscore.js і jQuery ў спалучэнні дапаможа вам дамагчыся гэтага (underscore.js не ў стане рабіць DOM для ўстаўкі/маніпуляцыі сам па сабе).

    var abc = ['a', 'b', 'c', 'd']; //i disregarded how you get the list of letters.
    
    _.each(abc, function(letter){
        $('ul').append('
  • '+letter+'
  • ');
    });
    

    Also made a fiddle for you

    0
    дададзена

    Падкрэсліванне не маюць такой магчымасці, але ваш выпадак мог бы зрабіць некаторыя трук на шаблоне. змяніць шаблон, як гэта:

    <% for(var i=65; i<90; i++) { %>
    
  • <% print(String.fromCharCode(i)); %>
  • <% } %>
    

    гэта павінна быць тое, што вы хочаце.

    0
    дададзена
    вы прапусцілі Z, вар я = 65; г <= 90; я ++ , гэта неабходна <=, але досыць блізка :)
    дададзена аўтар med116, крыніца