2017-10-17 193 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