2017-05-24 3 views
0

Ich habe ein bisschen Mühe beim Analysieren der Ergebnisse eines Arrays und Drucken auf der Konsole. Es ist eigentlich ein zweiteiliges Problem. Wenn ich das Array erstelle, fügt es den Ergebnissen "undefined" hinzu. Wenn ich versuche, die einzelnen Strings im Array zu durchlaufen, parst es nicht, sondern gibt nur das vollständige Array-Objekt zurück.Probleme beim Analysieren der Ergebnisse von Array haben

Ich versuche, alle in einer Listenansicht ausgewählten Feldwerte zu sammeln und sie als separate Elemente in eine andere untergeordnete Liste zu schreiben. Wenn Ergebnisse in einer Konsole angezeigt werden, wird dies als Objekt-Array angezeigt. Wenn ich den Typ der Methode dagegen ausfühle, glaube ich, dass es als String angezeigt wird.

Um zu wiederholen, warum bekomme ich undefined und warum ist mein Array nicht korrekt zu drucken. Im Folgenden finden Sie ein Beispiel für das, was bisher zurückgegeben wurde (wenn zwei Datensätze ausgewählt wurden) und meinen Code.

Ergebnisse:

undefinedDaffy DuckBugs Hase

undefined

Code:

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

Antwort

0

Warum Sie schreiben "var itemObjects;" in 1 Zeile und füge eine Zeichenfolge hinzu "itemObjects + = items [j] .get_item (" Titel ");" in einem anderen? Es wird sowieso nur 1 String sein, so dass, wenn Sie diese zwei Zeilen in eine ändern „undefined“ verschwinden soll:

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 

Der Grund dafür ist, dass die Variable ohne Wert nach dem Erstellen, es nicht definiert ist, so + = 'Unicorn' wird uns hässlich 'UndefinedUnicorn' geben. Wenn Sie eine Variable für diesen Zweck erstellen möchten, schreiben Sie sie "var x = ''".

Und wenn - zum Beispiel - Sie Länge aller „Produkte“ summieren wollen, dann sollte dies eine Funktion wie folgt aussehen:

 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); 
     } 

Aber ich bin nicht ganz sicher, was Sie hier versuchen, zu erhalten .

+0

Das war genau der Stupser, den ich brauchte. Um zu erklären, warum ich "var itemObjects" in 2 Zeilen getrennt habe, hatte ich vergessen, dass, als ich ursprünglich den Code wie oben beschrieben zusammengeführt habe, das Skript aus einem unbekannten Grund vollständig gelöscht wurde. Als ich es wieder getrennt habe, hat es angefangen zu arbeiten. Ich habe es auch durch JSHint laufen lassen und bin auch nicht auf Fehler gestoßen. Ich habe bearbeitet, um den korrekten Arbeitscode zu veröffentlichen, für mich sowieso ... – Ghoztrider

Verwandte Themen