【问题标题】:javascript loop through array using as patternjavascript 使用 as 模式遍历数组
【发布时间】:2016-02-08 18:04:30
【问题描述】:

我有数组:

array = ["One","Two","Three","Four"]

我想通过循环将其用作模式

for(var i=0; i<10; i++){

从数组索引中动态获取值,所以在这种情况下,我的目标是:

one two three four one two three four one two

【问题讨论】:

  • % operator -> var idx = i % array.length;
  • 注意:这不会是无限的,因为还有一个终点。它只是在重复。
  • 你想退出循环吗?

标签: javascript arrays loops


【解决方案1】:
    var array = ["One", "Two", "Three", "Four"]
    var limit = 10;
    var asarray = true;
    var newarray = concatArray(array, limit, asarray);

    function concatArray(array, limit, asarray) {
        var size = array.length, counter = 0, newarray = [];
        for (var i = 0; i <= size; i++) {
            i = (i === size) ? 0 : i;
            if (counter <= limit) {
                newarray.push(array[i]);
            } else {
                break;
            }
            counter++;
        }
        return newarray = (asarray === true) ? newarray : newarray.join(" ");
    }

asarray =true

[“一”、“二”、“三”、“四”、“一”、“二”、“三”、“四”、“一”、“二”、“三”]

asarray =false

一二三四一二三四一二三

【讨论】:

    【解决方案2】:

    您可以使用原始 Array 连接到自身任意多次,甚至无需像这样更改原始数组:

    array.concat(array).concat(array).concat(array)
    // ["One", "Two", "Three", "Four", "One", "Two", "Three", "Four", "One", "Two", "Three", "Four", "One", "Two", "Three", "Four"]
    

    此外,您可以使用一个函数来传递您希望数组重复的时间,这样您就不必处理所有那些concat 调用。

    var arr = [1, 2, 3, 4];
    
    function concatArray(array, times) {
      var result = [], i = 0;
    
      for ( ; i < times; i += 1) {
        result = result.concat(array);
      }
    
      return result;
    }
    
    concatArray(arr, 3); // [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]
    

    最后,如果您想修改结果数组以包含一定数量的项目,或者过滤它们,或者映射它们,或者其他什么,您可以在您的函数中添加一个回调。

    var arr = [1, 2, 3, 4];
    
    function concatArray(array, times, cb) {
      var result = [], i = 0;
      for ( ; i < times; i += 1) {
        result = result.concat(array);
      }
    
      if (cb && typeof cb == 'function') {
        result = cb(result);
      }
    
      return result;
    }
    
    var final = concatArray(arr, 3, function(a) {
      return a.slice(0, 10);
    });
    
    console.log(final) // [1, 2, 3, 4, 1, 2, 3, 4, 1, 2]
    

    【讨论】:

    • 你没有回答这个问题。问题是关于在简单循环中基于索引添加数组值。这是一种典型的过度杀戮,会产生疯狂的慢速网站。
    • 这是一种更好的方法,更完整,我提供了一个更好的选择,具有更多的控制和更好的机会来创建可重用的代码
    • 它既不完整也不提供更好的控制。
    【解决方案3】:

    如果你想要一个无限循环,只需像这样创建一个:

    var num = 0;
    while(true) {
        var element = array[num];
        if(num == array.length - 1) {
            num = 0;
         } else {
            num++;
         }
    
         //when you are done
         //break;
    }
    

    您可以将元素变量用作数组中的每个字符串或元素。完成后,只需调用“break”即可。

    【讨论】:

      【解决方案4】:

      这只是打印您正在寻找的输出的逻辑

      语法可以随任何语言变化

      var l=array.length
      counter=0
      for(var i=0; i<10; i++){
      
      if(counter=l){
      print array[counter]
      counter=0
      }
      else
      {
      print array[counter]
      counter=counter+1
      }
      }
      

      【讨论】:

        【解决方案5】:

        我想你想做下面这样的事情,你想得到的索引是i % array.length(JavaScript 中的代码):

        var array = ["One","Two","Three","Four"];
        var results = [];
        
        for (var i = 0; i < 10; i++) {
          var word = array[i % array.length];
          results.push(word);
          // console.log(word);
        }
        
        console.log('this is the result: ' + results);
        

        【讨论】:

          猜你喜欢
          • 2012-01-07
          • 2013-06-11
          • 2012-08-15
          • 1970-01-01
          • 2018-06-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多