代码之家  ›  专栏  ›  技术社区  ›  jimrice

带条件的Javascript For循环

  •  0
  • jimrice  · 技术社区  · 6 年前

    我希望使用for循环来完成以下任务。

    我将在数组中定义一组值,一组十六进制值作为图表的默认颜色。我想使用带有2个选项的循环来获取这些值的定义数量。

    1. 如果定义的颜色集中的#个值小于所请求的#个值,则一旦到达最后一个值,它将从1开始并继续循环。

    2. 不太重要但可能有用的方法是,从获取默认值集中任何索引的值开始,并使用与#1相同的条件,因为如果它到达colors数组中的最后一个值,它将循环回到开始并继续。

    var defaultColors = ["#90CAF9","#B39DDB","#7E57C2","#78909C","#AED581"] ;
    var chartData = [12,24,30,40,15,23,35] ;
    
    var dynamicColors = function (a) {
        var colors = [];
        for(i=0;i<a;i++){
            colors.push(defaultColors[i]);
        }
        return colors;
    }
    

    以及对颜色的呼唤

    backgroundColor: dynamicColors(chartData.length),
    

    在上面的示例中,有比颜色值更多的数据点需要循环从颜色数组的开始处重新开始。

    ["#90CAF9","#B39DDB","#7E57C2","#78909C","#AED581","#90CAF9","#B39DDB"]
    

    #2的预期输出-指定起始索引。

    ["#7E57C2","#78909C","#AED581","#90CAF9","#B39DDB","#7E57C2","#78909C"]
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   Mark    6 年前

    你可以用 modulo (aka remainder) 操作人员 % 使用要循环的列表长度继续循环列表:

    var defaultColors = ["#90CAF9", "#B39DDB", "#7E57C2", "#78909C", "#AED581"];
    var chartData = [12, 24, 30, 40, 15, 23, 35];
    
    var dynamicColors = function(a) {
      var colors = [];
      for (i = 0; i < a; i++) {
        colors.push(defaultColors[i % defaultColors.length]);
      }
      return colors;
    }
    
    console.log(dynamicColors(10))

    要从不同的位置开始,只需将其添加到 i 再次使用mod运算符:

    var defaultColors = ["#90CAF9", "#B39DDB", "#7E57C2", "#78909C", "#AED581"];
    var chartData = [12, 24, 30, 40, 15, 23, 35];
    
    var dynamicColors = function(a, start) {
      var colors = [];
      for (i = 0; i < a; i++) {
        colors.push(defaultColors[(i + start) % defaultColors.length]);
      }
      return colors;
    }
    
    console.log(dynamicColors(7, 3)) // seven values starting at index 3