2017-05-24 26 views
0

尝试解析数组的结果并打印到控制台时遇到了一些问题。实际上这是一个两部分问题。当我构建数组时,它将向结果添加“未定义”。当我尝试遍历数组中的单个字符串时,它不解析,只返回完整的数组对象。解析数组结果时出现问题

我想要做的是收集从列表视图中选择的所有字段值,并将它们作为单独项目写入另一个子列表。在控制台中显示结果时,它显示为一个对象数组。当我对它运行typeof方法时,我相信它显示为一个字符串。

重申,为什么我得到undefined,为什么我的数组不能正确打印控制台。以下是目前返回的内容(选择两条记录时)和我的代码的示例。

结果:

undefinedDaffy DuckBugs兔子

不确定

代码:

// 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

你为什么写作 “VAR itemObjects;”在1行中添加一个字符串“itemObjects + = items [j] .get_item(”Title“);”在另一个?未来将有只1串,无论如何,所以当你改变那些2线成一个“不确定”应该消失:

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 

这样做的原因是,没有任何价值创造的变量之后,这是不确定的,所以+ ='独角兽'会给我们带来难看的'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); 
     } 

但我不完全知道什么是你想拿到这里。

+0

这正是我需要的微调。为了说明为什么我将“var itemObjects”分隔成两行,我忘记了当我最初合并上面指定的代码时,它完全因为某种未知原因而终止了脚本。当我再次分开时,它开始工作。我也通过JSHint运行它,并没有遇到任何错误。无论如何,我编辑发布正确的工作代码,对我来说...... – Ghoztrider