Loops 断开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

我想用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 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.filterArray.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');