如何在不使用 .fill 的情况下创建具有特定可变长度和重复相同值的数组?

How to create an array with certain variable length and the same value repeated without using .fill?

由于 Chart.js,我在 ASP.NET MVC 的项目中创建了一个图表,在视图中,我需要创建一个具有值的数组,但是数组是可变的,我使用了“.fill”并且效果很好,但在 IE11 中不起作用,所以我需要另一种方式。

我一直在网上搜索,但我还没有找到任何干净的方法,而且我的知识非常有限,因为我刚刚开始使用 JS。

这是我正在使用的,但在 IE11 上不起作用

var arrayBackgroundColor = Array(@Model.Data.Count()).fill('rgba(54, 162, 235, 0.2)');

(@Model.Data.Count()是一个整数,对应的长度必须有)

这是 IE11 对控制台错误的回答

SCRIPT438: Object doesn't support property or method 'fill'

所以,我非常感谢另一种创建所需数组的方法。

您可以使用普通的 for 循环

let arrayBackgroundColor =[]; 

for(var i = 0;i<@Model.Data.Count();i++){
  arrayBackgroundColor .push('rgba(54, 162, 235, 0.2)')
});

或者你可以使用这个Polyfill

使用map:

var arrayBackgroundColor = Array.apply(null, Array(@Model.Data.Count())).map(function(e) {
    return 'rgba(54, 162, 235, 0.2)';
});

Polyfill.fill()

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/fill#Polyfill

if (!Array.prototype.fill) {
  Object.defineProperty(Array.prototype, 'fill', {
    value: function(value) {

      // Steps 1-2.
      if (this == null) {
        throw new TypeError('this is null or not defined');
      }

      var O = Object(this);

      // Steps 3-5.
      var len = O.length >>> 0;

      // Steps 6-7.
      var start = arguments[1];
      var relativeStart = start >> 0;

      // Step 8.
      var k = relativeStart < 0 ?
        Math.max(len + relativeStart, 0) :
        Math.min(relativeStart, len);

      // Steps 9-10.
      var end = arguments[2];
      var relativeEnd = end === undefined ?
        len : end >> 0;

      // Step 11.
      var final = relativeEnd < 0 ?
        Math.max(len + relativeEnd, 0) :
        Math.min(relativeEnd, len);

      // Step 12.
      while (k < final) {
        O[k] = value;
        k++;
      }

      // Step 13.
      return O;
    }
  });
}