开发者问题收集

javascript:在 For 循环中将值推送到数组变量中,但值附加(推送)未定义

2020-03-09
46
 if (objJson[0].task.length > 0) {

                    var Arrayset = [];
                    var categories = [];
                    var starts1 = [];
                    var ends1 = [];
                    var val1 = [];
                    var val2 = [];

                    for (var i = 0; i < objJson[0].task.length; i++) {

                        var syearval = parseInt(objJson[0].PSDate[i].substr(0, 4));
                        var smonthval = parseInt(objJson[0].PSDate[i].substr(5, 2));
                        var sdateval = parseInt(objJson[0].PSDate[i].substr(8, 2));

                        var eyearval = parseInt(objJson[0].PEDate[i].substr(0, 4));
                        var emonthval = parseInt(objJson[0].PEDate[i].substr(5, 2));
                        var edateval = parseInt(objJson[0].PEDate[i].substr(8, 2));



                       val1=[Date.UTC(syearval, smonthval, sdateval)];

                       val2= [Date.UTC(eyearval, emonthval, edateval)];


                       starts1.push(val1[i]);
                       ends1.push(val2[i]);

                       Arrayset.push({ name: objJson[0].task[i], completed: objJson[0].taskpercent[i], start:starts1[i], end:ends1[i] });


                    }

                    MainLoadChart(Arrayset);
                }

            }

声明了两个数组变量 starts1 ends1

i=0 时,For 循环

starts1=[1574035200000] ends1=[1574640000000]

值正确添加到数组中。

同样,当 i=1 等时,for 循环会进行迭代

starts1=[1574035200000, undefined ] ends1=[1574640000000, undefined ]

starts1 ends1 数组中,undefined 会添加到数组中。我尝试了所有方法但都无法解决这个问题。

2个回答

当 i = 1

您的 val1 在数组中将只有 1 个值,对于 val2 也是如此,即数组将只有 1 个元素

并且您正在推送索引值,该值将是 undefined

怎么样

代替

starts1.push(val1[i]);
ends1.push(val2[i]);

使用

starts1.push(val1[0]);
ends1.push(val2[0]);
Kiran Shinde
2020-03-09

val1val2 的赋值存在问题。您重复地将一个包含 1 个项目的新数组赋值给它,这就是为什么索引 0 处有值(当 i=0 时)而索引 1、2、3 等处有 undefined

您实际上可以跳过 val1、val2 的声明和赋值,直接将值推送到数组。

    //val1=[Date.UTC(syearval, smonthval, sdateval)];
    //val2= [Date.UTC(eyearval, emonthval, edateval)];


      starts1.push(Date.UTC(syearval, smonthval, sdateval));
      ends1.push(Date.UTC(eyearval, emonthval, edateval));

as-if-i-code
2020-03-09