【问题标题】:Ramda: How to remove keys in objects with null values, empty arrays and empty lists recursively? [duplicate]Ramda:如何递归地删除具有空值、空数组和空列表的对象中的键? [复制]
【发布时间】:2021-12-14 20:16:26
【问题描述】:

类似于Ramda: How to remove keys in objects with empty values?,但我正在寻找可以递归工作的东西。这样我就可以解决 null !== undefined 的 AJV 和 JSON Schema 的“功能”。

我从这个开始......这是删除空值但不能递归工作

import R from 'ramda';
describe('filter null values', () => {
  it('should filter out null values', () => {
    const specimen = {
      tasks: [
        { id: 'foo', blank: '', zero: 0, nool: null },
        { nool: null },
        { id: '', blank: null, zero: 0, nool: null },
      ],
      useless: { nool: null },
      uselessArray: [{ nool: null }],
      nool: null,
    };
    const expectation = {
      tasks: [
        { id: 'foo', blank: '', zero: 0 },
        { id: '', zero: 0 },
      ],
    };
    const removeNulls = R.reject(R.equals(null));
    expect(removeNulls(specimen)).toEqual(expectation);
  });
});

【问题讨论】:

    标签: javascript jestjs ramda.js


    【解决方案1】:

    映射传递的项目。如果该值是一个对象(或数组),则在当前值上递归调用removeNulls。映射值后,拒绝所有undefinednull 或空的非字符串值(参见R.isEmpty)。

    const { pipe, map, when, is, reject, ifElse, F, either, isEmpty, isNil } = R;
    
    const removeNulls = pipe(
      map(when(is(Object), v => removeNulls(v))),
      reject(ifElse(is(String), F, either(isEmpty, isNil))),
    );
    
    const specimen = {"tasks":[{"id":"foo","blank":"","zero":0,"nool":null},{"nool":null},{"id":"","blank":null,"zero":0,"nool":null}],"useless":{"nool":null},"uselessArray":[{"nool":null}],"nool":null};
    
    const result = removeNulls(specimen);
    
    console.log(result);
    <script src="https://cdnjs.cloudflare.com/ajax/libs/ramda/0.27.1/ramda.min.js" integrity="sha512-rZHvUXcc1zWKsxm7rJ8lVQuIr1oOmm7cShlvpV0gWf0RvbcJN6x96al/Rp2L2BI4a4ZkT2/YfVe/8YvB2UHzQw==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>

    【讨论】:

      猜你喜欢
      • 2019-10-30
      • 1970-01-01
      • 2021-11-17
      • 2017-04-20
      • 2016-06-19
      • 1970-01-01
      • 2016-04-11
      • 2011-08-23
      • 1970-01-01
      相关资源
      最近更新 更多