我已经编写了以下代码,我将输出作为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
答案 0 :(得分:0)
导致错误的原因是您试图推送数组中不存在的项目;分别为cdate[j]
和mkt_share[j]
。 push()
方法仅适用于数组类型,因此您应该在没有索引器的cdate
anf mkt_share
上调用它:
cdate.push(cmsk_data[0]);
mkt_share.push(cmsk_data[1]);
答案 1 :(得分:0)
您在
中收到错误cdate[j].push(cmsk_data[0]) ;
因为cdate[j]
未定义。
答案 2 :(得分:0)
您正在尝试回读cdate数组中的元素j
,然后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个阵列并占用内存。