Javascript 如何在不使用.fill的情况下创建具有特定可变长度且重复相同值的数组?
在ASP.NET MVC的一个项目中,我使用Chart.js创建了一个图形,在视图中,我需要创建一个带有值的数组,但是数组的长度是可变的,我使用了“.fill”,效果很好,但在IE11中不起作用,所以我需要另一种方法 我一直在网上搜索,但还没有找到任何干净的方法,而且我的知识非常有限,因为我刚刚开始使用JS 这是我使用的,但在IE11上不起作用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
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;
}
});
}