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

问题描述 投票:2回答:3

这个问题在这里已有答案:

我正在创建一个图表,感谢Chart.js,在ASP.NET MVC的项目中,在视图中,我需要创建一个带有值的数组,但是数组的长度是可变的,我使用了“。填写“并且工作得很好,但在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'

所以,我真的很感激另一种创建所需数组的方法。

javascript arrays ecmascript-6 ecmascript-5
3个回答
1
投票

您可以使用普通for循环

let arrayBackgroundColor =[]; 

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

或者你可以使用这个Polyfill


1
投票

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;
    }
  });
}

1
投票

使用map

var arrayBackgroundColor = Array.apply(null, Array(@Model.Data.Count())).map(function(e) {
    return 'rgba(54, 162, 235, 0.2)';
});
© www.soinside.com 2019 - 2024. All rights reserved.