Loops 断开TypeScript对象属性上的循环
我想用TypeScript迭代对象属性。但我想在找到特定物体后立即停止 比如:Loops 断开TypeScript对象属性上的循环,loops,typescript,Loops,Typescript,我想用TypeScript迭代对象属性。但我想在找到特定物体后立即停止 比如: function hasElement() { let obj = { a: 'a', b: 'b', c: 'c' } let found = false; for (let i = 0; i < Object.keys(this.obj).length && !found; i++) { let
function hasElement() {
let obj = {
a: 'a',
b: 'b',
c: 'c'
}
let found = false;
for (let i = 0; i < Object.keys(this.obj).length && !found; i++) {
let prop = obj[i];
found = prop === 'a';
}
return found;
}
console.log(hasElement());
函数hasElement(){
设obj={
a:‘a’,
b:‘b’,
c:‘c’
}
让发现=错误;
for(设i=0;i
但是,obj[i]
不起作用,因为键不是数字。
当然,我可以使用
break
或跳转到标签,但在我看来,这很难看,因为我宁愿首先指定循环条件。这不是使用TypeScript迭代对象的方式。您正在查找的是的..of:
for (const key of Object.keys(obj)) {
if (obj[key] === 'a') { return true; }
}
return false;
您还可以使用.find()
:
您可以使用Array.filter或Array.find Array.filter将遍历整个列表,但有更好的支持
let found = Object.keys(obj).filter(key => obj[key] == 'a')[0]
Array.find应该正是您所需要的,但它在某些浏览器上缺乏支持
let found = Object.keys(obj).find(key => obj[key] == 'a');
IE对此缺乏支持。您可以找到MDN文档。条件基于属性值而不是键。但是基于
find()
的解决方案正是我想要的。谢谢两种解决方案都使用了价值。啊,是的,你是对的。虽然return
是一种休息,但我更喜欢它而不是break
。再次感谢!该条件应在第一次出现时停止循环。但是基于find()
的解决方案正是我想要的。谢谢
let found = Object.keys(obj).find(key => obj[key] == 'a');