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

Javascript 如何在不使用.fill的情况下创建具有特定可变长度且重复相同值的数组?,javascript,arrays,ecmascript-6,ecmascript-5,Javascript,Arrays,Ecmascript 6,Ecmascript 5,在ASP.NET MVC的一个项目中,我使用Chart.js创建了一个图形,在视图中,我需要创建一个带有值的数组,但是数组的长度是可变的,我使用了“.fill”,效果很好,但在IE11中不起作用,所以我需要另一种方法 我一直在网上搜索,但还没有找到任何干净的方法,而且我的知识非常有限,因为我刚刚开始使用JS 这是我使用的,但在IE11上不起作用 var arrayBackgroundColor = Array(@Model.Data.Count()).fill('rgba(54, 162, 23

在ASP.NET MVC的一个项目中,我使用Chart.js创建了一个图形,在视图中,我需要创建一个带有值的数组,但是数组的长度是可变的,我使用了“.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)')
});
让arrayBackgroundColor=[];
对于(var i=0;i使用
map

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

if(!Array.prototype.fill){
Object.defineProperty(Array.prototype,“fill”{
值:函数(值){
//步骤1-2。
if(this==null){
抛出新的TypeError('这是null或未定义');
}
var O=对象(此);
//步骤3-5。
var len=O.length>>>0;
//步骤6-7。
var start=参数[1];
var relativeStart=start>>0;
//第八步。
var k=相对启动<0?
数学最大值(len+relativeStart,0):
Math.min(相对论,len);
//步骤9-10。
var end=参数[2];
var relativeEnd==未定义?
len:end>>0;
//第11步。
var final=相对值<0?
数学最大值(len+relativeEnd,0):
Math.min(相对论,len);
//步骤12。
while(k
你可以用一个循环来填充它。我考虑过这个问题,但是如果数组太大,会影响性能,对吗?我正在搜索像.fill()这样更干净的东西。LewisThis可能会帮助你:。这个示例使用
.concat
.slice
。IE11支持这两种方法(甚至更低),这可能是一个易于重用的解决方案。否则,请使用
.map
考虑一下,但如果数组太大,会影响性能,对吗?我正在搜索更干净的东西,如.fill()@MiguelCordero你可以检查polyfil和
的情况。
循环是基本的,即使是在mdn创建的polyfil中,也使用
循环,而
循环谢谢,我使用了,它可以正常工作。你是说箭头函数@Lewis?我会解决这个问题。不,你看到的是
flat
flatMap
(还有可能是不同的
Map
对象)。我的不好,将删除我的注释=)@Bergi我编辑了我的答案-有更好的吗?(我已经测试过了,效果很好)
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;
    }
  });
}