2017-05-24 28 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