我在ServiceNow工作,并且在涉及对象,数组以及如何访问元素时有一个业余编码问题。下面,我从一个空数组开始,并用对象填充它。现在我有一个包含对象的数组,我的问题是如何访问不同的元素?我希望能够生成一个表,其中列是数字,short_desc和url,并且行是动态生成的。我怎么能做到这一点?
data.list = [];
var ka = new GlideRecord('x_81991_knowledge');
ka.addQuery('kb_category.label', 'Benefits');
ka.query();
while(ka.next()) {
data.list.push({
number: ka.getValue('number'),
short_desc: ka.getValue('short_description'),
url:'kb_view.do?sysparm_article=' + ka.getValue('number')
});
}
答案 0 :(得分:1)
所以,你有一个对象:data
,并且该对象是一个元素:list
。该元素是一个包含其他对象的数组。
正如JavaScript中的对象包含具有名称的属性一样,数组就像具有属性的对象,这些属性都具有顺序编号的名称。
例如,如果您有一个像var fruitz = ['apple', 'banana', 'hammer', 'pear'];
这样的数组,它与一个看起来像这样的对象非常相似:
var fruitz = {
0:'apple',
1:'banana',
3:'hammer',
4:'pear'
};
在任何一个示例中,您都可以使用值' banana'来访问该元素。用:fruitz[1];
。
当然,存在一些差异 - 包括这样的事实,当然,对象通常不具有连续数字名称的属性! - 这只是一个可视化如何访问数组元素的好方法。
JS 中的数组元素保留了它们的顺序,因此位置3中的元素(第四个元素 - 记住,数组使用"从零开始的索引")将保留在位置3.
您可以执行for循环迭代并从数组中获取元素,如下所示:
var i;
for (i = 0; i < fruitz.length; i++) {
gs.info(fruitz[i] + ' is element number ' + i + ' in the array.');
}
在线学习Angular有一些很好的资源,如果你想了解服务门户如何在前端工作,这绝对是至关重要的。
答案 1 :(得分:1)
另外,如果您想在 servicenow 中获取记录的 url,我建议使用 ka.getLink()
。参考:getLink()
答案 2 :(得分:0)
以下是如何将数组作为平面表输出的示例。将其作为&#34;后台脚本&#34;运行,因为它使用&#34; gs.print&#34;输出结果。请注意,我必须添加第一行,只需设置&#34;数据&#34;脚本中的对象,但如果代码中已经存在,则不需要它。
var data = {}
data.list = [];
var ka = new GlideRecord('x_81991_knowledge');
ka.addQuery('kb_category.label', 'Benefits');
ka.query();
while(ka.next()) {
data.list.push({
number: ka.getValue('number'),
short_desc: ka.getValue('short_description'),
url:'kb_view.do?sysparm_article=' + ka.getValue('number')
});
}
for(var i=0; i < data.list.length; i++){
gs.print("Number: " + data.list[i].number + ", Short Description: " + data.list[i].short_desc + ", URL: " + data.list[i].url);
}
答案 3 :(得分:0)
这是使用带有数组的obj来获取数据的方法:
data = []; // array
var ka = new GlideRecord('x_81991_knowledge');
ka.addQuery('kb_category.label', 'Benefits');
ka.query();
while (ka.next()) {
var list = {}; // object
list.number = ka.getValue('number');
list.short_desc = ka.getValue('short_description');
list.url = 'kb_view.do?sysparm_article=' + ka.getValue('number');
data.push(list);
}