如何打破Lodash嵌套循环

时间:2019-07-09 16:15:19

标签: lodash

打破Lodash嵌套循环的最佳方法是什么?

使用Lodash进行嵌套循环以避免问题的另一种方法也是一种选择。

这是示例伪代码:

function findItem(elements:any,itemName:string):boolean
{
   let result = false;
   _.forEach(elements,(element:any)=>{
           _.forEach(element.items, (item:any) => {
              if(item.name === itemName)
              {
                 result = true;
                 return false; // here will exit only the current forEach !!!
              }
           }
   }
   return result;
}

2 个答案:

答案 0 :(得分:1)

使用lodash可以将_.forEach()_.find()结合使用,因为当谓词返回_.find()true会立即返回。当_.find()返回结果时,将其分配给result,然后返回false退出_.forEach()

function findItem(elements: any, itemName: string): boolean {
  let result = null;
  _.forEach(elements, (element: any) => {
    const res = _.find(element.items, item => item.name === itemName);

    if(res) {
      result = res;
      return false;
    }
  }
  return result;
}

在普通JS / typescript中,您可以使用嵌套的for...of循环,并在找到它时返回该项目:

function findItem(elements: any, itemName: string): boolean {
  for(const el of elements) {
    for(const item of el.items) {
      if (item.name === itemName) {
        return item;
      }
    }  
  }

  return null;
}

答案 1 :(得分:0)

您会发现https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/label很有帮助。

如果您改用常规的for of循环,则可以根据标签来标记它们和continue/break

function findItem(elements: any, itemName: string): boolean {
  outer:
  for(const el of elements) {
    innner:
    for(const item of el.items) {
        //can 'break outer' here.
    }  
  }
}