Javascript 在阵列中循环,直到满足条件

Javascript 在阵列中循环,直到满足条件,javascript,Javascript,我有任何带有对象列表的面包屑数组,我想根据我当前的面包屑找到它的父对象并继续,直到父对象的id为空 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 < a

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

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]);
   }
}
如何继续循环,直到父\u id为null并将所有值存储在breadcrumb\u all中


我可以使用do while和during while parent_id为null结束循环。我很困惑,请帮忙

我相信这会给你你想要的东西,尽管我不能完全从这个问题上说出来

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

const数组=[{id:1,parent_id:null},{id:2,parent_id:1},{id:3,parent_id:2},{id:4,parent_id:3}]; const breadcrumbparentmap=breadcrumbs=>currentBreadcrumb,currentMap=[]=>{ const MapWithThiscrump=[ …当前地图, 当前面包屑, ]; 如果currentBreadcrumb.parent\u id==null{ 用这个面包屑返回地图; } const parentCrumb=breadcrumbs.findcrumb=>crumb.id==currentBreadcrumb.parent\u id; 如果parentCrumb==未定义{ 用这个面包屑返回地图; } 返回面包屑堆积器 面包屑 breadcrumbs.findcrumb=>crumb.id==当前breadcrumb.parent\u id, 用这个面包屑做地图 } const current_breadcrumb={id:4,parent_id:3}; const mapper=breadcrumbparentmapper数组; const result=mappercurrent\u面包屑;
console.dirresult我相信这会给你你想要的东西,尽管我不能完全从这个问题上说出来

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

const数组=[{id:1,parent_id:null},{id:2,parent_id:1},{id:3,parent_id:2},{id:4,parent_id:3}]; const breadcrumbparentmap=breadcrumbs=>currentBreadcrumb,currentMap=[]=>{ const MapWithThiscrump=[ …当前地图, 当前面包屑, ]; 如果currentBreadcrumb.parent\u id==null{ 用这个面包屑返回地图; } const parentCrumb=breadcrumbs.findcrumb=>crumb.id==currentBreadcrumb.parent\u id; 如果parentCrumb==未定义{ 用这个面包屑返回地图; } 返回面包屑堆积器 面包屑 breadcrumbs.findcrumb=>crumb.id==当前breadcrumb.parent\u id, 用这个面包屑做地图 } const current_breadcrumb={id:4,parent_id:3}; const mapper=breadcrumbparentmapper数组; const result=mappercurrent\u面包屑;
console.dirresult如果找到要查找的内容,请在i=0时重新启动循环:

我该怎么做:

 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)];

如果找到要查找的内容,请在i=0时重新启动循环:

我该怎么做:

 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)];

编辑这个问题,我觉得有错。我想????根据我的..你的意图是找到所有拥有当前面包屑家长id的家长?编辑这个问题,我觉得它有输入错误。我想????基于我的..你的目的是找到所有具有当前面包屑父id的父级?这是一个非常有趣和有效的生成器函数使用,我以前没有见过它们以有用的方式实现,所以我很高兴在这里看到一个。这是一个非常有趣和有效的生成器函数使用,我以前没有见过它们以一种有用的方式实现,所以我很高兴在这里看到它们