在Javascript中为不确定的数据集循环有限的颜色集

Cod*_*ick 2 javascript chart.js

我正在使用 ChartJS 来显示股票数据。我有七种颜色要为对象迭代。当我添加第 8 个对象时,我希望它在图表上的颜色是颜色数组中的第一个颜色。

$(document).ready(function () {
  var context = document.getElementById('positions_chart');
  var ctx = context.getContext("2d");

  var quantities = [];
    $("#positions_chart").data('positions').forEach(function(element){
      quantities.push(element['quantity']);
  });

  var colors =[ "#FFCE56",
            "#FFA75D",
            "#46BFBF",
            "#5975CB",
            "#FF5D5D",
            "#FFCC5D",
            "#52DF52",
            'black'
];

  var tickers = [];
  $("#positions_chart").data('positions').forEach(function(element){
    tickers.push(element['ticker']);
  });



  var pieData = {
    labels: tickers,
    datasets: [
    {
      backgroundColor: [
            "#FFCE56",
            "#FFA75D",
            "#46BFBF",
            "#5975CB",
            "#FF5D5D",
            "#FFCC5D",
            "#52DF52",
            'black'

          ],
      borderColor: "rgba(220,220,220,1)",
      data: quantities
  }  
]
}

var chartInstance = new Chart(ctx, {
    type: 'doughnut',
    data: pieData,
    options: {
        responsive: true
    }
});
Run Code Online (Sandbox Code Playgroud)

股票代码的数量表明有多少对象需要图表上的颜色。ChartJS 在后台执行的操作是在股票代码中循环分配新颜色。我面临的问题是当股票数量>颜色数量时,我希望颜色数组从顶部重置。所以我没有图表中新对象的空白颜色。

man*_*mat 5

您可以使用双向链表切换颜色数组。

或者只是在创建对象时使用匿名函数,

datasets: [{backgroundColor: (() => {
  let bgcolors = [];
  for (let i=0; i < tickers.length; ++i) bgcolors.push(colors[i % colors.length]);
  return bgcolors;
  })()
}]
Run Code Online (Sandbox Code Playgroud)