[英]filter an array based on multiple arrays using some()
我很有可能會以錯誤的方式進行處理,但是我有一個主數組,如果它的任何對象值都存在於另外兩個數組中,則需要過濾該主數組。 我正在嘗試使用filter()
和some()
的組合,但是我現在無法使用。
const milestones = <FormArray>this.piForm.get('_milestones');
if (this.piById) {
milestonesToCreate = milestones.value
.filter(milestone => !this.piById.milestones.some(item => item.milestoneId === milestone.milestoneId));
milestonesToDelete = this.piById.milestones
.filter(milestone => !milestones.value.some(item => item.milestoneId === milestone.milestoneId));
milestonesToUpdate = milestones.value
.filter(milestone => milestones.value
.some(item =>
item.milestoneId === milestonesToCreate.milestoneId && milestonesToDelete.milestoneId));
}
在上面的代碼中milestonesToUpdate
應該是經過過濾的結果,其中數組由不在milestonesToCreate
和milestonesToDelete
的對象組成
希望我已經解釋得足夠好了。
添加示例里程碑數組
milestones = [
{
"milestoneId": 0
}
]
首先,看起來您的問題只是對您對some()
最終調用中布爾檢查的誤解。
您已輸入:
item.milestoneId === milestonesToCreate.milestoneId && milestonesToDelete.milestoneId
這與說相同, 其中item.milestoneId等於MilestonesToCreate.milestoneId,而MilestonesToDelete.milestoneId存在 。 我希望您只是嘗試檢查兩個數組中是否都存在當前值。
最好一次通過即可實現:
elementsToUpdate
,從您的副本的所有元素this
為elementsToDelete
elementsToUpdate
,一旦另一個列表中不存在某項,則將該元素移到elementsToCreate
elementsToDelete
刪除。
而且,如果使用id用作鍵的hash(old good {}
)而不是使用數組,甚至可以提高代碼的速度。 然后檢查“如果元素在這里”將與item in elementsToUpdate
一樣容易,而不是每次都迭代所有元素
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.