2017-05-24 15 views
0

アレイの結果を解析してコンソールに印刷しようとすると、少し問題があります。それは実際には2つの部分の問題です。配列を構築すると、結果に「未定義」が追加されます。配列内の個々の文字列をループしようとすると、解析されず、完全な配列オブジェクトが返されます。トラブルの解析結果の配列

私がしようとしているのは、リストビューから選択したすべてのフィールド値を収集し、別の項目として別の子リストに書き込むことです。コンソールに結果を表示すると、オブジェクト配列として表示されます。私はそれに対して文字列として表示すると信じてtypeofメソッドを実行するとき。

私は未定義となっているのはなぜですか、なぜアレイが正しくコンソールに印刷されないのですか?以下は、これまでに返されているもの(2つのレコードが選択されている場合)と私のコードの例です。

結果:

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行に1つの文字列を追加する "itemObjects = items [j] .get_item(" Title ");"別の?そこだけ1列はとにかくだろう、あなたは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 

この理由は、任意の値なしで変数を作成した後に、それはそう、未定義であるということです+ = '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); 
     } 

しかし、私はあなたがここに取得しようとしているかを正確にわからないんだけど。

+0

これはまさに私が必要とした軽いものでした。 "var itemObjects"を2行に分けた理由を説明するために、私が最初にあなたが上記のようにコードをマージしたとき、何か不明な理由でスクリプトが完全に殺されたことを忘れてしまった。私はそれをもう一度分けたとき、それは働き始めた。私はJSHintを介してそれを実行し、いずれのエラーにも遭遇しなかった。とにかく私は正しい作業コードを公開するように編集しました... – Ghoztrider