如何在javascript中将数组附加到现有数组中
我需要对Sharepoint中的不同列表进行查询,每个列表都可以得到一些结果 但是我不知道如何将一个结果附加到下一个结果,请参见修剪数据变量如何在javascript中将数组附加到现有数组中,javascript,arrays,Javascript,Arrays,我需要对Sharepoint中的不同列表进行查询,每个列表都可以得到一些结果 但是我不知道如何将一个结果附加到下一个结果,请参见修剪数据变量 function GetData(billCycleId, clientCode, jobCodes, engagementCode) { var enhanceFunctions = [ function(searchResultRow) {
function GetData(billCycleId, clientCode, jobCodes, engagementCode) {
var enhanceFunctions = [
function(searchResultRow) {
return spService.AddHyperLinkOnFields(searchResultRow, config.HyperLinks);
},
function(searchResultRow) {
return spService.AddPresenceOnFields(searchResultRow, config.UserFields);
},
function(searchResultRow) {
return spService.FormatDateFields(searchResultRow, config.DateFields, generalConfig.DateTimeFormat);
},
function(searchResultRow) {
return spService.AddImageMapping(searchResultRow, config.ImageFields);
},
function(searchResultRow) {
return spService.FormatNumberFields(searchResultRow, config.NumberFields);
}
];
var selectProperties = spService.TransformFieldsToSelectProperties(config.Fields);
var extendedSelectProperties = selectProperties.slice(); // copy array
var hyperLinkedProperties = spService.TransformFieldsToSelectProperties(config.HyperLinks)
extendedSelectProperties = extendedSelectProperties.concat(hyperLinkedProperties);
spService.GetAllListsFromWeb()
.then(function(lists){
var listEnumerator = lists.getEnumerator();
while (listEnumerator.moveNext()) {
var oList = listEnumerator.get_current();
var title = oList.get_title();
var id = oList.get_id();
if(title.indexOf("Bill Cycles")){
// Get data from SP
GetRelatedBillCyclesFromList(listid, extendedSelectProperties, billCycleId, clientCode, jobCodes, engagementCode, enhanceFunctions)
.then(function (data) {
var trimmedData = spService.SpSearchQuery.TrimSearchResultsToSelectProperties(data, selectProperties);
// Add data to dataTable
})
.catch (function (message) {
vm.Name = "Error";
vm.ValidDataLoaded = true;
});
}
//Do something with oList.
}
var dataTable = $(tableSelector).DataTable();
dataTable.clear().rows.add(trimmedData).columns.adjust().draw(); // Resize columns based on new data sizes
vm.ValidDataLoaded = true;
})
}
function getAllListsFromWeb(){
var deferred = $q.defer();
var context = SP.ClientContext.get_current();
var web = context.get_web();
var lists = web.get_lists();
context.load(lists);
context.executeQueryAsync(
function() {
$log.info("Successfully retrieved list item result");
deferred.resolve(lists);
},
function(error, errorInfo) {
$log.warn("Retrieving list item result failed");
deferred.reject(errorInfo);
}
);
return deferred.promise;
}
更新1:
我得到以下错误:
无法读取未定义的属性“push”
更新相关代码:
spService.GetAllListsFromWeb()
.then(function(lists){
var listEnumerator = lists.getEnumerator();
var result;
while (listEnumerator.moveNext()) {
var oList = listEnumerator.get_current();
var title = oList.get_title();
var id = oList.get_id();
if(title.indexOf("Bill Cycles") !== -1){
// Get data from SP
GetRelatedBillCyclesFromList(id, extendedSelectProperties, billCycleId, clientCode, jobCodes, engagementCode, enhanceFunctions)
.then(function (data) {
var trimmedData = spService.SpSearchQuery.TrimSearchResultsToSelectProperties(data, selectProperties);
// Add data to dataTable
trimmedData.forEach(function(item){ // loop over source array
result.push(item); //append to result array
});
})
.catch (function (message) {
vm.Name = "Error";
vm.ValidDataLoaded = true;
});
}
//Do something with oList.
}
var dataTable = $(tableSelector).DataTable();
dataTable.clear().rows.add(result).columns.adjust().draw(); // Resize columns based on new data sizes
vm.ValidDataLoaded = true;
})
您可以在数组上循环并将每个项添加到要附加到的数组中
let result = [];
...
trimmedData.forEach(function(item){ // loop over source array
result.push(item); //append to result array
});
...
@Li357-否。“此方法不会更改现有数组,而是返回一个新数组。”可能会在-1@ArmanCharan不是重复,代码是完全不同的。我在问题中引用的代码肯定是相关的
result.push.apply(result,trimmedData)
也可以。请检查更新,有问题错误消失了,但现在看来我有一个更复杂的问题,当我调试时,我可以看到项目被推到结果数组中,直到我看到结果数组有13个元素,但是,当它退出while循环并尝试在datatable插件中呈现它时,结果再次为空。有什么想法吗?你需要使用承诺而不是while循环来获取数据。在内部执行异步调用时,该调用将在底部数据表代码之后运行。