繁体   English   中英

遍历数组直到满足条件

[英]loop through the array till condition is met

我有任何带有对象列表的面包屑数组,我想根据当前的面包屑查找其父对象并继续直到parent_id为null

array = [....{id: 1, parent_id: null},{id: 2, parent_id: 1},{id: 3, parent_id: 2},{id: 4, parent_id: 3}...];

breadcrumb_all = [];
current_breadcrumb = {id: 4, parent_id: 3};

for (var i = 0; i < array.length; i++)
{ 
  if ( current_breadcrumb.parent_id  == array[i]['id'] )
   {
      breadcrumb_all.push(array[i]);
   }
}

我如何继续循环,直到parent_id为null并将所有值存储在面包屑_全部中。

我可以在parent_id为null的同时和期间使用do来结束循环。 我很困惑,请帮忙。

如果找到所需内容,请在i = 0处重新启动循环:

if ( current_breadcrumb.parent_id  == array[i]['id'] ) {
  breadcrumb_all.push(array[i]);
  current_breadcrumb = array[i]; // continue search with this

  if(current_breadcrum.parent_id === null)
    break;

  i = 0; // restart loop
}

我该怎么做:

 function* findChain(values, child) {
   if(child.parent_id === null) return;

   for(const value of values) {
     if(value.id === child.parent_id) {
       yield value;
       yield* findChain(values, value);
       return;
    }
  }
}

 const result = [...findChain(your, data)];

我相信这应该可以为您提供所需的信息,尽管我不能完全从问题中看出。

您可以使用递归函数导航面包屑数组,直到其为null ,然后返回您拥有的地图:

 const array = [{id: 1, parent_id: null},{id: 2, parent_id: 1},{id: 3, parent_id: 2},{id: 4, parent_id: 3}]; const breadcrumbParentMapper = breadcrumbs => (currentBreadcrumb, currentMap=[]) => { const mapWithThisCrumb = [ ...currentMap, currentBreadcrumb, ]; if (currentBreadcrumb.parent_id === null) { return mapWithThisCrumb; } const parentCrumb = breadcrumbs.find(crumb => crumb.id === currentBreadcrumb.parent_id); if (parentCrumb === undefined) { return mapWithThisCrumb; } return breadcrumbParentMapper( breadcrumbs )( breadcrumbs.find(crumb => crumb.id === currentBreadcrumb.parent_id), mapWithThisCrumb ) } const current_breadcrumb = {id: 4, parent_id: 3}; const mapper = breadcrumbParentMapper(array); const result = mapper(current_breadcrumb); console.dir(result) 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM