如何通过下划线循环字母表

Jer*_*myW 14 javascript loops list backbone.js underscore.js

我在BackboneJS视图中使用Underscore的template()方法.我想在我的视图中显示一个字母表列表,以便按字母对集合进行排序.

因此,我的视图中有26个链接列表(一个链接=一个字母).而不是复制粘贴每个链接(这对代码可维护性来说非常糟糕),我想知道是否可以通过下划线循环遍历字母表.

结果显示:

<li ><a href="#">a</a></li>
<li ><a href="#">b</a></li>
<li ><a href="#">c</a></li>
...
<li ><a href="#">z</a></li>
Run Code Online (Sandbox Code Playgroud)

jak*_*kee 43

var alphabet = "abcdefghijklmnopqrstuvwxyz".split("");
_.each(alphabet, function(letter) {
  console.log(letter);
});
Run Code Online (Sandbox Code Playgroud)

这就是你如何做到的.


nik*_*shr 12

  1. 使用charcodes创建范围

    var alphas = _.range(
        'a'.charCodeAt(0),
        'z'.charCodeAt(0)+1
    ); 
    // [97 .. 122]
    
    Run Code Online (Sandbox Code Playgroud)
  2. 用字母创建一个数组

    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]
    
    Run Code Online (Sandbox Code Playgroud)
  3. 注入模板

    var tpl = 
    '<ul>'+
        '<% _.each(letters, function(letter) { %>'+
            '<li><%= letter %></li>'+
        '<% }); %>'+
    '</ul>';
    var compiled = _.template(tpl);
    var html = compiled({letters : letters});
    
    Run Code Online (Sandbox Code Playgroud)

和演示http://jsfiddle.net/hPdSQ/17/

var alphas = _.range(
    'a'.charCodeAt(0),
    'z'.charCodeAt(0)+1
); 

var letters = _.map(alphas, a => String.fromCharCode(a));

var tpl = 
'<ul>'+
    '<% _.each(letters, function(letter) { %>'+
        '<li><%= letter %></li>'+
    '<% }); %>'+
'</ul>';
var compiled = _.template(tpl);

var html = compiled({letters : letters});

document.getElementById('res').innerHTML = html;
Run Code Online (Sandbox Code Playgroud)
<script src="http://underscorejs.org/underscore-min.js"></script>
<div id='res'></div>
Run Code Online (Sandbox Code Playgroud)

  • 请注意,此答案中的"alphas"地图不会**返回原始字符数组,"a","b","c",......`.你会得到像"a\u0001\u0000","b\u0001\u0000","c\u0001\u0000",......这样的unicode字符串.你应该使用像`a => String.fromCharCode(a)`之类的箭头函数来传递第一个参数(`fromCharCode`接受任意数量的参数,导致lodash传递给`map`回调的其他任何东西被转换为null值,如上所示). (2认同)

Med*_*edo 5

for(var letter=65;letter<91;letter++)
{
var _char = String.fromCharCode(letter);
console.log(_char);
}
Run Code Online (Sandbox Code Playgroud)

或使用97-123 ascii代码中的小写字母