Ramda 'when' 没有产生预期的结果

Ramda 'when' not producing expected result

我希望 arrayTester 查看数组中的每个数组,如果两个元素都是空字符串,则将它们从数组中删除。相反,我取回了原始数组。

预期结果 = [[], ['string', '']]

实际结果 = [['',''], ['string', '']]

有什么想法吗?

let data = [['',''], ['string', '']]
const emptyString = R.equals('')
const removeEmptyElementsFunc = R.reject(R.isEmpty)
const arrayTester = (data) => {
 R.forEach(
        R.when(
          R.all(emptyString),
          R.map(removeEmptyElementsFunc)
        )(data))
        return data
      }

arrayTester(data)

如果您需要将一个空字符串数组映射到一个空数组,您唯一需要做的就是确保它确实只由空字符串组成。 ("transformation" 相当简单:只是 return 一个空数组。)

all(isEmpty) 将 return true 如果数组是由空的东西组成的。 always([]) 总是 return 一个空数组。

const arrayTester = map(when(all(isEmpty), always([])));

console.log(

  arrayTester([['', ''], ['a', 'b', '']]),
  arrayTester([['', '', ''], ['a', 'b', '']]),
  arrayTester([['', 'x', ''], ['a', 'b', '']])
  
);
<script src="https://cdnjs.cloudflare.com/ajax/libs/ramda/0.26.1/ramda.min.js"></script>
<script>const {map, when, all, isEmpty, always} = R;</script>