我想使用forEach
进行迭代,并且在找到正确的元素后,返回该值。我的印象是return
内部的简单forEach
就足够了,但我们知道调用语句中的结果是undefined
。
所以我必须声明一个作用于整个方法的输出变量并勾选所有元素,尽管事实上已经找到了正确的元素。 (元素是独一无二的。)
getMenuIndex(url) {
let output = -1;
this.menus.forEach(app => {
app.subs.forEach(sub => {
console.log(sub.link + " vs " + url);
if (sub.link === url)
// return sub.id;
output = sub.id;
});
});
return output;
}
这是代码味道很长的路。是否有更简洁的方法来选择与URL条件匹配的元素的ID?
答案 0 :(得分:5)
幸运的是,我们在TypeScript和ES6中有for..of
用于此类场景:
getMenuIndex(url) {
for (const app of this.menus) {
for (const sub of app.subs) {
console.log(sub.link + " vs " + url);
if (sub.link === url)
return sub.id;
}
}
return -1;
}
在明显forEach
限制的情况下非常有用,例如await
/ yield
或return
/ break
。
正如其他答案所说,有一些数组方法可以更好地适应这种情况。虽然对于TypeScript ES5,目标for..of
会被转换为常规for
,因此本身是最快的解决方案。
答案 1 :(得分:1)
您可以使用Array#some
并退出true
。
function getMenuIndex(url) {
let output = -1;
this.menus.some(app => app.subs.some(sub => {
if (sub.link === url) {
output = sub.id;
return true;
}
}));
return output;
}