【问题标题】:Minifying for{} loops缩小 for{} 循环
【发布时间】:2013-08-19 21:15:49
【问题描述】:

我有一些在整个项目中反复使用的 javascript for {} 循环,它们都与此类似:

for (var i = 0; i < things.length; i++) {
    console.log(things[i]);
    // This may be different in different areas of the project
}

我缩小了代码,但循环占用了大量的缩小代码。有没有办法把上面的代码缩短成这样:

loop {
    console.log(things[i]);
    // This may be different in different areas of the project
}

可能不是上面的,但你明白了。 任何帮助将不胜感激:)

【问题讨论】:

  • 无法修改语言本身,但您可以考虑使用迭代器:forEach()

标签: javascript optimization minify


【解决方案1】:

如果你重复打印不同的数组,你可以为它创建一个函数来减少你的重复:

function printArray(arr) {
    for (var i = 0; i < arr.length; i++) {
        console.log(arr[i]);
    }
}

然后像这样调用:

printArray(things);

如果您做的不仅仅是打印并且希望它更通用,您应该使用回调,如下所示:

function loopArr(arr, cb) {
    for (var i = 0; i < arr.length; i++) {
        cb(arr[i]);
    }
}

这可以被称为:

loopArr(thing, function (i) {
    console.log(i);
});

Fiddle


还有一些工具已经可以为你做这件事,例如,如果你正在使用(或想要使用)jQuery,你可以使用jQuery.each()

【讨论】:

  • 很好的建议。
  • 问题是console.log()部分在项目的不同区域是不同的。我会补充的,对不起
  • 我建议获取 length 属性的值并使用它,而不是在每次迭代时重新访问该属性。
  • @smerny 我不会否认这是一种可能性,但是如果他们正在修改数组,这将是当前元素并且对长度没有影响,并且如果它们添加到循环期间的数组,这看起来很危险而且不太实用。如果是这种情况,即使是 jQuery 版本也无济于事,因为它还将变量设置为 length 属性的值以供使用。
【解决方案2】:

一种 jQuery 风格的方法:

function each(arr, func) {
  for ( var i = 0; i < arr.length; ++i ) {
    func(arr[i]);
  }
}

可以这样调用:

each( things, function(thing) { console.log(thing); } );

each( things, function(thing) { console.log(thing); alert(thing); } );

等等

【讨论】:

  • 或者你知道...each(things, console.log)
  • 没错,只要您只调用一个预定义的函数。
【解决方案3】:

您必须传入项目和回调,但当然可以。

function loop (item, callback) {
    for (var i = 0; i < item.length; i++) {
        callback(item[i]);
    }
}

用途:

loop(things, function (item) {
    console.log('do things here with each ' + item);
});

另请注意,在更现代的浏览器中,您可以简单地这样做:

things.forEach(function (item) { 
    /* do whatever */
});

【讨论】:

    【解决方案4】:
    function forEach(array, func) {
        var i = array.length;
        while(i--) {
            func(array[i]);
        }
    }
    

    【讨论】:

      【解决方案5】:

      每个人都击败了我,但这是另一种写法

      function forEach(collection, callback){
          var e;
      
          for (var i = 0; e = collection[i++];) {
              callback(e);
          }
      }
      

      及其用法:

      var a = ["The", "Brown", "Cow"];
      
      forEach(a, function(e) { console.log(e); });
      

      应该提到的是迭代器函数的实现有很多。您的确切情况我需要改进这些。

      【讨论】:

        猜你喜欢
        • 2019-02-27
        • 1970-01-01
        • 2011-12-23
        • 1970-01-01
        • 1970-01-01
        • 2022-01-10
        • 2018-04-11
        • 2012-11-07
        • 1970-01-01
        相关资源
        最近更新 更多