2017-07-04 48 views
0

我在我的角度應用中的以下接口:返回數組不給定對象

interface Reservation { 
    id: string; 
    from: Date; 
    to: Date; 
} 

interface Bedroom { 
    id: string; 
    reservations: Array <Reservation> ; 
} 

interface House { 
    id: string; 
    bedrooms: Array <Bedroom>; 
} 

在某些時候,我從HouseArray在S一定Bedroom內刪除從Reservation並返回整個的副本HouseArray只有沒有刪除Reservation項目。

我不能改變現有的ArrayHouse s。我應該怎麼做?

+0

這個問題似乎是不言自明的。進行深層複製,遍歷它並刪除屬性。這種方法你有問題嗎?你嘗試了什麼? – estus

+0

所以我實際上想避免迭代每個項目的性能原因。我想知道我可以使用'JSON.parse(JSON.stringify(房屋))'然後實際上去「採摘?」保留對象從結果對象中返回。 – Sammy

+0

'JSON.parse(JSON.stringify ...'幾乎不會對性能有好處,在深度複製實現中您不會看到它,您可以深度複製並從中刪除屬性,或者可以省略屬性手工複製數組並檢查是否可以比_,cloneDeep等現有解決方案更好地進行深度複製。無法避免迭代,因爲數組處理無法迭代完成, – estus

回答

0

你應該用你的陣列上splice方法,combinet與對象(即由underscore.js提供)的克隆: https://www.w3schools.com/jsref/jsref_splice.asp http://underscorejs.org/#clone

這將是東西(我沒有檢查代碼)像這個:

import * as _ from 'underscore'; 
removeReservation(bedroom: Bedroom, reservation: Reservation): Bedroom { 
    let position = bedroom.reservations.findIndex(checkingRes => { 
     return checkingRes.id == reservation.id 
    }); 
    let bedroomCopy = _.clone(bedroom); 
    bedroomCopy.reservations.splice(position, position + 1); 
    return bedroomCopy; 
} 

如果你想逐根刪除保留,你只需要忽略克隆操作。

removeReservation(bedroom: Bedroom, reservation: Reservation): Bedroom { 
    let position = bedroom.reservations.findIndex(checkingRes => { 
     return checkingRes.id == reservation.id 
    }); 
    bedroom.reservations.splice(position, position + 1); 
    return bedroom; 
} 
+1

拼接具有破壞性,是不是? – estus

+0

您是什麼意思通過破壞性?它只是從數組中刪除對象。我想這就是問題的情況;) –

+1

問題是'我不能改變現有的房屋陣列'。 – estus