2017-04-05 71 views
0

我想用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或跳轉到標籤,但在我看來它很難看,因爲我寧願首先指定環路條件。

回答

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. 
+0

該條件是基於屬性值而不是關鍵。但是基於find()的解決方案正是我所期待的。謝謝! – Sandro

+0

這兩種解決方案都使用該值。 –

+0

啊,你說得對。雖然'返回'是一種休息,我喜歡它比'休息'更多。再次感謝! – Sandro

1

你可以使用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文件here

+0

條件應該在第一次發生時停止循環。但是基於find()的解決方案正是我所期待的。謝謝! – Sandro