2017-10-17 159 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); 
} 

我有不同程度的JavaScript列表數據的同一層次空單,而不是循環的任何級別明確我使用遞歸調用(這是幸運的工作正常),但功能總是返回空列表。遞歸函數返回的JavaScript

JSON Data

+0

提供上述功能 – dev

+0

數據輸入爲例,來的jsfiddle讓我們看到你的代碼運行。 –

+2

您可以在函數內部定義'lineItemList',這意味着每次調用該函數時都會從空數組開始。您需要將數組作爲參數傳遞給函數,並且還需要'返回'getLineItemList'函數的結果。 – Titus

回答

1

您在函數內定義了lineItemList,這意味着每次調用該函數時都會以空數組開始。您需要將該陣列作爲參數傳遞給該函數,並且還需要getLineItemList函數的結果return

試試這個:

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

中給出基本上我忘了保留遞歸調用的結果。 – Usman

+0

@Usman是的,你從第一個函數調用中獲得'lineItemList'數組。 – Titus

2

你沒有捕捉到遞歸調用的返回值:

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

,你應該與lineItemList CONCAT。因此,lineItemList保持它聲明的方式,這是一個空數組。如果至少有一個quotElement.isGroup返回true,但沒有任何示例輸入,那麼可能不會,但我們不知道。

+0

示例輸入在帖子 – Usman