2017-10-17 7 views
-3
function getLineItemList(quotationItemElements, checkedLineItemIds) { 
var lineItemList = []; 
quotationItemElements.children.forEach(function (quotElement, index) { 
    if(!parseBoolean(quotElement.isGroup)){ 
     checkedLineItemIds.forEach(function (checkedId, index) { 
      if(quotElement.id == checkedId){ 
       lineItemList.push(quotElement); 
      } 
     }); 
    }else { 
     if(quotElement.children.length > 0){ 
      getLineItemList(quotElement, checkedLineItemIds); 
     } 
    } 
}); 
return lineItemList; 
} 
function parseBoolean(str) { 
    return /true/i.test(str); 
} 

Ich habe gleiche Hierarchie von Daten auf verschiedenen Ebenen der JavaScript Liste, sondern jede Ebene der Schleife explizit i rekursiven Aufruf verwenden (die zum Glück funktioniert prima) Aber Funktion gibt leere Liste immer .rekursive Funktion zurückgeben leere Liste in JavaScript

JSON Data

+0

einen Dateneingang Beispiel für die obige Funktion – dev

+0

eine jsfiddle machen, damit wir Ihr Code ausgeführt wird sehen können. –

+2

Sie definieren 'lineItemList' in der Funktion, was bedeutet, dass Sie bei jedem Aufruf der Funktion mit einem leeren Array beginnen. Sie müssen das Array als Parameter an die Funktion übergeben, und Sie müssen auch das Ergebnis der Funktion "getLineItemList" zurückgeben. – Titus

Antwort

1

Sie definieren lineItemList innerhalb der Funktion, was bedeutet, dass Sie bei jedem Aufruf der Funktion mit einem leeren Array beginnen. Sie müssen das Array an die Funktion als Parameter übergeben, und Sie müssen auch return das Ergebnis der getLineItemList-Funktion.

Try this:

function getLineItemList(quotationItemElements, checkedLineItemIds, lineItemList) { 
    var lineItemList = lineItemList || []; 
    quotationItemElements.children.forEach(function (quotElement, index) { 
     if(!parseBoolean(quotElement.isGroup)){ 
      checkedLineItemIds.forEach(function (checkedId, index) { 
       if(quotElement.id == checkedId){ 
        lineItemList.push(quotElement); 
       } 
      }); 
     }else { 
      if(quotElement.children.length > 0){ 
       return getLineItemList(quotElement, checkedLineItemIds, lineItemList); 
      } 
     } 
    }); 
    return lineItemList; 
} 
+0

Grundsätzlich habe ich vergessen, das Ergebnis der rekursiven Aufruf zu behalten. – Usman

+0

@Usman Ja, Sie haben das Array lineItemList vom ersten Funktionsaufruf erhalten. – Titus

2

Sie nicht den Rückgabewert des rekursiven Aufruf erfassen hat:

if(quotElement.children.length > 0){ 
     /* nobody capture this */ getLineItemList(quotElement, checkedLineItemIds); 
    } 

die Sie sollte und Concat mit lineItemList. Daher bleibt lineItemList so, wie es deklariert ist, was ein leeres Array ist. Vielleicht nicht, wenn mindestens einer von quotElement.isGroup wahr zurückgibt, aber ohne Beispieleingabe, haben wir keine Ahnung.

+0

Beispiel Eingabe ist in Post gegeben – Usman

Verwandte Themen