繁体   English   中英

尝试在jquery中推送数组时的奇怪输出

[英]Wierd output when trying to push an array in jquery

我写了下面的代码,因为cannot read property 'push' of undefined所以我得到了输出

var data = [
            { MFG_NAME: "ABC", CONCATED_MKT_SHARE: "01-OCT-14|0.59" },
            { MFG_NAME: "XYZ", CONCATED_MKT_SHARE: "01-OCT-14|0.87" },
            { MFG_NAME: "ABC", CONCATED_MKT_SHARE: "01-NOV-14|0.25" },
            { MFG_NAME: "XYZ", CONCATED_MKT_SHARE: "01-NOV-14|0.67" },
            { MFG_NAME: "ABC", CONCATED_MKT_SHARE: "01-DEC-14|0.10" },
            { MFG_NAME: "XYZ", CONCATED_MKT_SHARE: "01-DEC-14|0.03" }
           ];
var cmname  = new Array();
var cmdate  = new Array();
var crank   = [];
var mktshare = new Array(); 
for(i=0;i<data.length; i++ ){
    var name = data[i].MFG_NAME;
    for(j=0; j<data.length; j++){   
        mkt_share = new Array();
        cdate = new Array();
        if(name=data[j].MFG_NAME)
        {
            cmsk_data = data[j].CONCATED_MKT_SHARE.split('|');
            cdate[j].push(cmsk_data[0]) ;  //Here I am getting the error
            mkt_share[j].push(cmsk_data[1]) ; //Here I am getting the error
        }
    }
    cmdate[i] = cdate;      
    mktshare[i] = mkt_share;
        alert(cdate);
}
cmname[i] = name;

然后,我将其更改为以下代码。 它在警报中给出了一个奇怪的输出

  var data = new Array();
data = <?php echo $result; ?>;  
var dlen    = data.length;
var cmname  = new Array();
var cmdate  = new Array();
var crank   = [];
var mktshare = new Array(); 
for(i=0;i<data.length; i++ ){
    var name = data[i].MFG_NAME;
    for(j=0; j<data.length; j++){   
        mkt_share = new Array();
        cdate = new Array();
        if(name=data[j].MFG_NAME)
        {
            cmsk_data = data[j].CONCATED_MKT_SHARE.split('|');
            cdate[j] = cmsk_data[0] ;
            mkt_share[j] = cmsk_data[1] ;
        }
    }
    cmdate[i] = cdate;      
    mktshare[i] = mkt_share;
     alert(cdate);
}
cmname[i] = name; alert(cmname);

我在循环中的警报alert(cdate)中得到以下输出

在此处输入图片说明

为什么我得到此输出,而不是警报中的输出必须为01-OCT-14,01-NOV-14,01-DEC-14

另外,警报alert(cmname)给出如下相同类型的输出

在此处输入图片说明

而是在警报中,输出必须为ABC,XYZ

导致该错误的原因是,您试图推送到数组中不存在的项目; cdate[j]mkt_share[j] push()方法仅在数组类型上可用,因此您应该在没有索引器的cdate mkt_share上调用它:

cdate.push(cmsk_data[0]);
mkt_share.push(cmsk_data[1]);

小提琴的例子

你得到的错误

cdate[j].push(cmsk_data[0]) ; 

因为cdate[j]未定义。

您正在尝试读回cdate数组中的元素j ,然后push一个新对象push入数组。 要添加新元素,请直接使用数组名称,如下所示。

cdate.push(cmsk_date[0]);

您还可以在任何时候执行检查以确保定义了数组:

if (cdate != undefined) {
   cdate.push(cmsk_data[0]) ;
}

另外,您的代码也有一些问题:

 if(name=data[j].MFG_NAME)
        {
            cmsk_data = data[j].CONCATED_MKT_SHARE.split('|');
            cdate[j].push(cmsk_data[0]) ;  //Here I am getting the error
            mkt_share[j].push(cmsk_data[1]) ; //Here I am getting the error
        }

您在条件语句中分配name ,而不是进行比较,应该使用===== 例如:

if (name == data[j].MFG_NAME) { }

另外,您还将为for循环中的每次迭代创建两个新的数组:

for(j=0; j<data.length; j++){   
        mkt_share = new Array();
        cdate = new Array();
}

如果data长度为1,000,则将创建2,000个数组,并耗尽客户端浏览器上的内存。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM