Javascript 数组[oListItem.id]有值,但数组[6]、数组[7]等未定义

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

我从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 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的(始终未定义)结果?