使用递归方式查找对象数组最高sequence值并分配对应属性值
方案说明
你当前的需求是遍历一维对象数组,筛选出coverage.agent.sequence属性最大值的对应项,再取值,完全不需要递归实现,用JavaScript内置的Array.reduce()方法就可以非常简洁地完成,代码可读性和性能都优于嵌套循环、递归方案。
最优实现(reduce方案)
// 遍历对比sequence值,保留最大值对应的对象,直接取finish属性 const subscriptionEndDate = data.reduce((maxItem, currentItem) => { return currentItem.coverage.agent.sequence > maxItem.coverage.agent.sequence ? currentItem : maxItem }, data[0]).coverage.finish;
运行后subscriptionEndDate的结果就是你预期的'2021-12-25'。
递归方案(仅作参考,无特殊需求不推荐)
如果一定要用递归实现,也可以通过递推遍历的逻辑完成,本质是模拟循环的执行过程:
function getMaxFinish(arr, index = 0, maxItem = arr[0]) { // 遍历结束直接返回最大值对应项的finish属性 if (index >= arr.length) return maxItem.coverage.finish; const current = arr[index]; // 对比更新最大值项 if (current.coverage.agent.sequence > maxItem.coverage.agent.sequence) { maxItem = current; } return getMaxFinish(arr, index + 1, maxItem); } const subscriptionEndDate = getMaxFinish(data);
该方案对于一维数组场景没有优势,仅适合特殊的嵌套结构遍历场景使用。
内容的提问来源于stack exchange,提问作者Muirik
相关产品推荐
相关产品推荐

