gpt4 book ai didi

javascript - 使用 ramda 谓词相互过滤两个列表

转载 作者:行者123 更新时间:2023-11-28 11:44:05 25 4
gpt4 key购买 nike

我有一个房间数组,每个房间都包含另一个无法预订的 disabledDays 数组:

const rooms = [
{
disabledDays: [],
title: 'roomOne'
},
{
disabledDays: ['2019-07-10T01:00:00.000Z'],
title: 'roomTwo'
},
{
disabledDays: [
'2019-07-08T01:00:00.000Z',
'2019-07-09T01:00:00.000Z',
'2019-07-02T01:00:00.000Z'
],
title: 'roomThree'
},
{
disabledDays: [],
title: 'roomFour'
}
];

然后我还有一系列选定的日期,我想用它们来查找可用的房间:

const selectedDates = [
'2019-07-06T01:00:00.000Z',
'2019-07-07T01:00:00.000Z',
'2019-07-08T01:00:00.000Z',
'2019-07-09T01:00:00.000Z'
];

在本例中,我想查找 disabledDays 数组中没有 selectedDatesrooms

到目前为止,我的尝试使用了 maprejectany 的组合,但这似乎并没有返回整个房间,因为一个结果。

const result = map(
room => reject(
date => any(disabled => isSameDay(date, disabled), selectedDates),
prop('disabledDays', room)
),
rooms
)

我使用 date-fns 中的 isSameDay 函数作为谓词来测试日期是否相同。

最佳答案

使用 Ramda,我将使用 R.reject,并使用 R.propSatisfies 创建一个谓词,该谓词使用 R.any 与带有柯里化(Currying) dateFns.isSameDayselectedDates 进行匹配>,以及翻转的 R.any:

const { curry, reject, propSatisfies, any, pipe, flip } = R

const eqByDate = curry(dateFns.isSameDay)

const fn = selectedDates => reject(propSatisfies(
any(pipe(
eqByDate,
flip(any)(selectedDates),
)),
'disabledDays',
))

const rooms = [{ disabledDays: [], title: 'roomOne' }, { disabledDays: ['2019-07-10T01:00:00.000Z'], title: 'roomTwo' }, { disabledDays: [ '2019-07-08T01:00:00.000Z', '2019-07-09T01:00:00.000Z', '2019-07-02T01:00:00.000Z' ], title: 'roomThree' }, { disabledDays: [], title: 'roomFour' } ];
const selectedDates = [ '2019-07-06T01:00:00.000Z', '2019-07-07T01:00:00.000Z', '2019-07-08T01:00:00.000Z', '2019-07-09T01:00:00.000Z' ];

const result = fn(selectedDates)(rooms)

console.log(result)
<script src="https://cdnjs.cloudflare.com/ajax/libs/ramda/0.26.1/ramda.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/date-fns/1.30.1/date_fns.min.js"></script>

关于javascript - 使用 ramda 谓词相互过滤两个列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56720248/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com