打破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;
}
答案 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.
}
}
}