我在尝试解析数组的结果并打印到控制台时遇到了一些麻烦。实际上这是一个两部分问题。当我构建数组时,它会在结果中添加“undefined”。当我尝试循环遍历数组中的各个字符串时,它不会解析,只返回完整的数组对象。
我要做的是收集从列表视图中选择的所有字段值,并将它们作为单独的项目写入另一个子列表。在控制台中显示结果时,它显示为对象数组。当我对它运行typeof方法时,我相信它显示为一个字符串。
重申一下,为什么我未定义,为什么我的数组无法正确打印到控制台。下面是到目前为止返回的内容(当选择了两个记录时)和我的代码的示例。
结果:
undefinedDaffy DuckBugs Bunny
未定义
代码:
// Grabs selected items from getSelected function and passes parameters to writeSelected function
function callAccepted() {
getSelected().done(function(varObjects) {
for (var k in varObjects) {
console.log(varObjects[k]);
}
}); // End getSelected
} // End callAccepted
// Grabs selected items, accepts input from callAccepted or callRejected functions
function getSelected() {
var dfd = $.Deferred(function(){
var ctx = SP.ClientContext.get_current();
var clientContext = new SP.ClientContext();
var targetList = clientContext.get_web().get_lists().getByTitle(ListName);
var SelectedItems = SP.ListOperation.Selection.getSelectedItems(ctx);
var items = [];
var arrItems = [];
for (var i in SelectedItems) {
var id = SelectedItems[i].id;
var item = targetList.getItemById(id);
clientContext.load(item, "Title");
items.push(item);
} // End for
clientContext.executeQueryAsync(
function(){ // Return to button click function
var itemLength = 0;
var itemObjects = [];
for (var j = 0; j < items.length; j++) {
itemObjects = items[j].get_item("Title");
itemLength += itemObjects;
arrItems.push(itemObjects);
}
dfd.resolve(arrItems, itemLength);
},
function(){ // Return to button click function
dfd.reject(args.get_message());
}
); // End ClientContext
}); // End dfd
return dfd.promise();
} // End getSelected
答案 0 :(得分:0)
你为什么写“var itemObjects;”在1行中添加一个字符串“itemObjects + = items [j] .get_item(”Title“);”在另一个?无论如何只有1个字符串,所以当你将这2行改为1时,“undefined”应该会消失:
function callAccepted() {
getSelected().done(function(varObjects, iLength) {
// Stuff
for (var k = 0; k < iLength; k++) {
console.log(varObjects[k]);
}
}); // End getSelected
} // End callAccepted
// Get user information function
function getSelected() {
var dfd = $.Deferred(function(){
var ctx = SP.ClientContext.get_current();
var clientContext = new SP.ClientContext();
var targetList = clientContext.get_web().get_lists().getByTitle(ListName);
var SelectedItems = SP.ListOperation.Selection.getSelectedItems(ctx);
var items = [];
var arrItems = [];
for (var i in SelectedItems) {
var id = SelectedItems[i].id;
var item = targetList.getItemById(id);
clientContext.load(item, "Title");
items.push(item);
} // End for
clientContext.executeQueryAsync(
function(){ // Return to button click function
for (var j = 0; j < items.length; j++) {
var itemObjects = items[j].get_item("Title");
var itemLength = items.length;
arrItems.push(itemObjects);
}
dfd.resolve(arrItems, itemLength);
},
function(){ // Return to button click function
dfd.reject(args.get_message());
}
); // End ClientContext
}); // End dfd
return dfd.promise();
} // End getSelected
原因是在创建没有任何值的变量之后,它是未定义的,所以+ ='Unicorn'会给我们丑陋的'UndefinedUnicorn'。如果您希望为此目的创建变量,请将其写为“var x =''”。
如果 - 例如 - 你想要总结所有“项目”的长度,那么这个函数应该是这样的:
function(){ // Return to button click function
var itemLength = 0;
for (var j = 0; j < items.length; j++) {
var itemObjects = items[j].get_item("Title");
itemLength += itemObjects;
arrItems.push(itemObjects);
}
dfd.resolve(arrItems, itemLength);
}
但我不确定你想要到这里来的是什么。