2017-03-16 79 views
0

This question它在Javascript中,但我會認爲在Typescript我可以做一些類似的地圖/過濾器操作來做同樣的事情。我有一個對象數組叫Room。每個Room都有一個名爲Width的屬性(它實際上是一個字符串,例如'4m','5m','6.5m')。Angular 2/Typescript - 如何檢查對象數組以查看屬性是否具有相同的值?

我需要檢查整個數組,看所有的寬度是否相同。基於這個問題,我有這個

,但我不知道是否有打字稿更好的東西:

let areWidthsTheSame = true; 
this.qp.rooms.forEach(function(room, index, rooms) { 
    if (rooms[index] != rooms[index+1]) areWidthsTheSame = false; 
}); 

任何想法?

僅供參考鏈接的問題有一個鏈接到these性能測試,這是在這個問題的背景下有趣的評論:

回答

2

這可以通過以下方式進行:

const widthArr = rooms.map(r => r.width); 
const isSameWidth = widthArr.length === 0 ? true : 
          widthArr.every(val => val === widthArr[0]); 

我們先將房間數組轉換爲寬度數組,然後檢查寬度數組中的所有值是否相等。

+0

不錯 - 我認爲你可以把它一條線,對吧? const isSameWidth = rooms.map(r => r.width).every(val => val === rooms [0] .width); – rmcsharry

+0

不,因爲我們訪問第一個索引,所以如果數組是空的,你會得到一個異常,如果你100%確定數組中有空間,那麼你可以安全地做到這一點@rmcsharry – galvan

+0

@gaivan啊好點, 謝謝 :) – rmcsharry