如何在不使用 .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;
}
});
}
由于 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;
}
});
}