我想用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
或跳转到标签,但在我看来它很难看,因为我宁愿首先指定循环条件。
答案 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。