JavaScript对象长度返回undefined

时间:2014-08-22 23:22:10

标签: javascript xml

我是这个网站的新手和编程所以我为任何错误提前道歉。但我正在努力学习JavaScript。

我使用JavaScript来解析包含位置记录的XML文件。如果XML文件包含多个位置记录,则以下代码按预期工作并创建正确数量的位置记录。如果XML文件仅包含1个位置记录,则无法创建位置记录。

我在这个网站上发现了很多关于这个问题的帖子,其中说明了#34; JavaScript对象没有长度属性,只有Arrays有"。我们正在将XML文件转换为对象。但是,我无法弄清楚建议的解决方案如何应用于我的代码。当我有1个位置记录时,location.length = undefined但当有2个记录时,location.length = 2.

我的代码需要更改哪些内容,以便在XML文件只包含1条记录时可以成功创建位置记录?谢谢你的帮助!

var xmlHelper = new XMLHelper(source.u_ebo_ebopayload);
var obj = xmlHelper.toObject();
JSUtil.logObject(obj);
var location = obj['ebo:Loc'];

gs.log('LocTransform - location object: ' + obj['ebo:Loc']);  
//One record in XML returns '[object Object]'
//Two records in XML returns '[object Object],[object Object]'

gs.log('LocTransform - location length: ' + location.length);
//One record returns 'undefined'
//Two records return '2'

//Start loading data for each location record
for (var i = 0; i < location.length; i++) {
    gs.log('LocTransform - Inside the For Loop with ' + location[i]['ebo:LocNbr']);
    //One record does not get inside FOR loop so no location record is created
    //Two records do get inside FOR loop and create both location records

    var gr = new GlideRecord('imp_location');
    gr.u_locnbr = location[i]['ebo:LocNbr'];
    gr.u_locnm = location[i]['ebo:LocNm'];
    gr.insert();
}

1 个答案:

答案 0 :(得分:0)

听起来您使用的数据仅包装结果集为&gt; 1的数组。只需将结果包装在一个数组中:

if (!location.length) {
    location = [location];
}