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
列表的不同级别有相同的数据层次结构,而不是显式循环任何级别我正在使用递归调用(幸运的是工作正常)但函数总是返回空列表。
答案 0 :(得分:2)
您没有捕获递归调用的返回值:
if(quotElement.children.length > 0){
/* nobody capture this */ getLineItemList(quotElement, checkedLineItemIds);
}
你应该和lineItemList
联系。因此,lineItemList
保持其声明的方式,这是一个空数组。也许不是如果quotElement.isGroup
中至少有一个返回true,但没有任何样本输入,我们就不知道了。
答案 1 :(得分:1)
您在函数内部定义lineItemList
,这意味着每次调用函数时都会以空数组开始。您需要将数组作为参数传递给函数,并且还需要return
getLineItemList
函数的结果。
试试这个:
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;
}