打破TypeScript对象属性的循环

时间:2017-04-05 13:31:25

标签: 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 prop = obj[i];
        found = prop === 'a';
    }
    return found;
}
console.log(hasElement());

但是obj[i]不起作用,因为密钥不是数字。 当然我可以使用break或跳转到标签,但在我看来它很难看,因为我宁愿首先指定循环条件。

2 个答案:

答案 0 :(得分:4)

这不是您使用TypeScript迭代对象的方式。您正在寻找for..of

for (const key of Object.keys(obj)) {
  if (obj[key] === 'a') { return true; }
}
return false;

您还可以使用.find()

const matchingKey = Object.keys(obj).find(key => obj[key] === 'a');
return Boolean(matchingKey); // convert to boolean.

答案 1 :(得分:2)

您可以使用 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文档here