[英]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.