Ramda 将日期更改为空数组

Ramda changing Date to empty array

我有一个函数 (removeNullOrEmpty) 可以删除空变量或 null 变量,它完美无缺。

但是,我注意到当我传递一个 Date 对象时,这个函数转换为一个空数组,我不知道为什么

import { pipe, reject, either, isNil, isEmpty, map, when, is } from 'ramda'

export const removeNullOrEmpty = (o) =>
  pipe(reject(either(isNil, isEmpty)), map(when(is(Object), removeNullOrEmpty)))(o)
const timestamp = new Date(Date.now()) // timestamp is a valid instance of Date 

const result = removeNullOrEmpty({ timestamp  })

console.log(result) // HERE timestamp is an empty array

{ timestamp: [] }

这是因为 is (Object)(正确地)将日期识别为对象,但 code for map uses a common trick to identify plain objects, and defaults to an array version 当输入不是普通对象时。

作为 Ramda 团队的一员,如果您愿意 raise an issue 报告此事,我将不胜感激。确实应该修复。

与此同时,我猜你已经意识到了这一点,但你可以使用相当丑陋的方法来解决这个问题:

const removeNullOrEmpty = (o) => pipe (
  reject (either (isNil, isEmpty)), 
  map (when (both (is (Object), complement (is (Date))), removeNullOrEmpty))
) (o)

或者

const removeNullOrEmpty = unary (pipe (
  reject (either (isNil, isEmpty)), 
  map (when (both (is (Object), complement (is (Date))), removeNullOrEmpty))
))