我有一個物件串列:
listings = [{
title: "Place 1",
price: "100",
availability: [
{
startDate: "2022-11-15T13:00:00.000Z",
endDate: "2022-11-23T13:00:00.000Z",
key: "selection"
},
{
startDate: "2022-11-30T13:00:00.000Z",
endDate: "2022-12-02T13:00:00.000Z",
key: "selection"
},
{
startDate: "2022-12-18T13:00:00.000Z",
endDate: "2022-12-20T13:00:00.000Z",
key: "selection"
}
]},
{
title: "Place 2",
price: "100",
availability: [
{
startDate: "2022-11-30T13:00:00.000Z",
endDate: "2022-12-30T13:00:00.000Z",
key: "selection"
}]
}
]
還有一個清單
range = [
{
startDate: "2022-12-01T13:00:00.000Z",
endDate: "2022-12-25T13:00:00.000Z",
key: "selection"
}
]
我想在我的日期范圍內獲得我的串列的物件方面。即 startDate 小于我的范圍[0].startDate 和 endDate 大于我的范圍[0].endDate。
我試過這樣做:
listings.filter(listItem => {
return parseInt(listItem.price) >= parseInt(minPrice) && parseInt(listItem.price) <= parseInt(maxPrice)
}).filter(listItem => {
return listItem.availability.map((i) => new Date(i.startDate).setHours(0, 0, 0, 0) <= new Date(range[0].startDate).setHours(0, 0, 0, 0) && new Date(i.endDate).setHours(0, 0, 0, 0) >= new Date(range[0].endDate).setHours(0, 0, 0, 0))
})
但是,它沒有像我預期的那樣過濾可用性超出范圍的 listItem,在此先感謝!
uj5u.com熱心網友回復:
.filter(...)應該為每個專案回傳一個布林值,指示該專案是否應該留在串列中。您正在回傳 的結果.map(...),它是一個轉換值陣列。
如果你看一個例子:listings[0].availability.map(a => a.startDate < range[0].startDate)它回傳Array(3) [ true, true, false ]而不是一個布林值。這個陣列被評估為true所以你的串列是全部的true,沒有一個被洗掉。
您可以使用可用性過濾器來洗掉不感興趣的可用性,然后檢查生成的可用性(如果剩余的可用性大于零)。
listings.filter(listing =>
listing.availability.filter(availability =>
new Date(availability.startDate) <= new Date(range[0].startDate) && new Date(availability.endDate) >= new Date(range[0].endDate))
.length > 0)
uj5u.com熱心網友回復:
range[0].endDate.setHours(0, 0, 0, 0)
這個運算式爆炸了 - 你不能呼叫setHours()它(因為此時它是一個字串文字)。
你可能想要做的是Date先把它變成一個實體:
new Date(range[0].endDate).setHours(0, 0, 0, 0)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/535363.html
標籤:javascript反应
上一篇:MUI如何輸出帶有換行的文本?
