Javascript 数组[oListItem.id]有值,但数组[6]、数组[7]等未定义
我从SharePoint列表中检索值,并将它们放入数组Javascript 数组[oListItem.id]有值,但数组[6]、数组[7]等未定义,javascript,arrays,list,sharepoint,Javascript,Arrays,List,Sharepoint,我从SharePoint列表中检索值,并将它们放入数组itemprices 使用console.log(“列表项的价格为:”+itemprices[oListItem.id])将打印出数组的值,但使用console.log(“itemprices 5:”+itemprices[5])告诉我它们未定义: 这是我使用的代码: var itemprices = []; // Gets values from Catalogue list; but they can't be used in the
itemprices
使用console.log(“列表项的价格为:”+itemprices[oListItem.id])
将打印出数组的值,但使用console.log(“itemprices 5:”+itemprices[5])代码>告诉我它们未定义:
这是我使用的代码:
var itemprices = [];
// Gets values from Catalogue list; but they can't be used in the Position list because of different formats
function retrieveListItems() {
var clientContext = new SP.ClientContext.get_current();
catalogueList = clientContext.get_web().get_lists().getByTitle('Catalog');
var camlQuery = new SP.CamlQuery(); // initiate the query object
camlQuery.set_viewXml('<View><Query><Where><In><FieldRef Name=\'ID\'/><Values><Value Type=\'Number\'>5</Value><Value Type=\'Number\'>6</Value><Value Type=\'Number\'>7</Value></Values></In></Where></Query></View>');
itemColl = catalogueList.getItems(camlQuery);
// returns the item collection based on the query
context.load(itemColl);
context.executeQueryAsync(retrieveListItemsSuccess, retrieveListItemsFail);
}
function retrieveListItemsSuccess() {
var listItemEnumerator = itemColl.getEnumerator();
while (listItemEnumerator.moveNext()) {
var oListItem = listItemEnumerator.get_current();
itemprices[oListItem.id] = oListItem.get_item('Preis');
console.log("itemprices 5: " + itemprices[5]);
console.log("itemprices 6: " + itemprices[6]);
console.log("itemprices 7: " + itemprices[7]);
console.log("Price of list item at is:" + itemprices[oListItem.id]);
}
}
// This function is executed if the above call fails
function retrieveListItemsFail(sender, args) {
alert('Failed to get list items. Error:' + args.get_message());
}
var itemprices=[];
//从目录列表中获取值;但由于格式不同,无法在职位列表中使用
函数retrieveListItems(){
var clientContext=new SP.clientContext.get_current();
catalogelist=clientContext.get_web().get_lists().getByTitle('Catalog');
var camlQuery=new SP.camlQuery();//启动查询对象
camlQuery.set_viewXml('567');
itemColl=catalogelist.getItems(camlQuery);
//基于查询返回项集合
加载(itemColl);
executeQueryAsync(RetrievelistItemsAccess、retrieveListItemsFail);
}
函数retrieveListItemsSuccess(){
var listItemEnumerator=itemColl.getEnumerator();
while(listItemEnumerator.moveNext()){
var oListItem=listItemEnumerator.get_current();
itemprices[oListItem.id]=oListItem.get_item('Preis');
console.log(“itemprices 5:+itemprices[5]);
console.log(“itemprices 6:+itemprices[6]);
log(“itemprices 7:+itemprices[7]);
log(“列表项的价格为:”+itemprices[oListItem.id]);
}
}
//如果上述调用失败,则执行此函数
函数retrieveListItemsFail(发送方,参数){
警报('未能获取列表项。错误:'+args.get_message());
}
我不知道这是JavaScript问题还是SharePoint问题。我做错了什么?您可以使用此功能:
itemprices.map(itemPrice=>console.log(itemPrice))首先,请使用正确的ClientContext对象,在上面的代码段中,它应该是ClientContext而不是context,如果要将字段值填充到数组中,请尝试使用array.push,以下是修改后的代码段供您参考:
<script type="text/javascript">
ExecuteOrDelayUntilScriptLoaded(retrieveListItems, 'sp.js');
var itemprices = [];
// Gets values from Catalogue list; but they can't be used in the Position list because of different formats
function retrieveListItems() {
var clientContext = new SP.ClientContext.get_current();
catalogueList = clientContext.get_web().get_lists().getByTitle('Companies');
var camlQuery = new SP.CamlQuery(); // initiate the query object
camlQuery.set_viewXml('<View><Query><Where><In><FieldRef Name=\'ID\'/><Values><Value Type=\'Number\'>5</Value><Value Type=\'Number\'>6</Value><Value Type=\'Number\'>7</Value></Values></In></Where></Query></View>');
itemColl = catalogueList.getItems(camlQuery);
// returns the item collection based on the query
clientContext.load(itemColl);
clientContext.executeQueryAsync(retrieveListItemsSuccess, retrieveListItemsFail);
}
function retrieveListItemsSuccess() {
var listItemEnumerator = itemColl.getEnumerator();
while (listItemEnumerator.moveNext()) {
var oListItem = listItemEnumerator.get_current();
itemprices.push(oListItem.get_item('Title'));
}
console.log(itemprices);
}
// This function is executed if the above call fails
function retrieveListItemsFail(sender, args) {
alert('Failed to get list items. Error:' + args.get_message());
}
</script>
ExecuteOrderLayUntilScriptLoaded(retrieveListItems,'sp.js');
var项目价格=[];
//从目录列表中获取值;但由于格式不同,无法在职位列表中使用
函数retrieveListItems(){
var clientContext=new SP.clientContext.get_current();
catalogelist=clientContext.get_web().get_lists().getByTitle(“公司”);
var camlQuery=new SP.camlQuery();//启动查询对象
camlQuery.set_viewXml('567');
itemColl=catalogelist.getItems(camlQuery);
//基于查询返回项集合
load(itemColl);
executeQueryAsync(RetrievelistItemsAccess、retrieveListItemsFail);
}
函数retrieveListItemsSuccess(){
var listItemEnumerator=itemColl.getEnumerator();
while(listItemEnumerator.moveNext()){
var oListItem=listItemEnumerator.get_current();
itemprices.push(oListItem.get_item('Title'));
}
控制台日志(项目价格);
}
//如果上述调用失败,则执行此函数
函数retrieveListItemsFail(发送方,参数){
警报('未能获取列表项。错误:'+args.get_message());
}
这是我的列表数据:
这是控制台中的阵列:
如果你运行这个,你会得到什么?:console.log(oListItem.id,'is type',typeof oListItem.id)
undefined“是类型”“undefined”
好了,好了:id实际上是未定义的,所以你在数组上用键未定义的设置值,而不是数字键:)@IceMetalPunk哦,我明白了。因此,我应该定义一个var I=0
,将列表项分配给I
位置的数组,并用I++递增代码>相反?这会起作用,但它的行为与您当前尝试的行为不同。您应该首先找出列表项的id
属性未定义的原因,并修复:)为什么要将项映射到console.log的(始终未定义)结果?