小编Gui*_*sco的帖子

换能器扁平化和 uniq

我想知道是否有一种方法可以使用换能器来展平列表并过滤唯一值?

通过链接,这很容易:

import {uniq, flattenDeep} from 'lodash';|

const arr = [1, 2, [2, 3], [1, [4, 5]]];

uniq(flattendDeep(arr)); // ->  [1, 2, 3, 4, 5]
Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.10/lodash.core.min.js"></script>
Run Code Online (Sandbox Code Playgroud)

但是这里我们在列表上循环了两次(深度层+n)。不理想。

我想要实现的是在这种情况下使用换能器。我已经阅读了关于它的 Ramda 文档https://ramdajs.com/docs/#transduce,但我仍然找不到正确编写它的方法。

目前,我使用了一个带有递归函数的 reduce 函数:

import {isArray} from 'lodash';

const arr = [1, 2, [2, 3], [1, [4, 5]]];

const flattenDeepUniq = (p, c) => {
    if (isArray(c)) {
        c.forEach(o => p = flattenDeepUniq(p, o));
    }
    else {
        p = !p.includes(c) ? [...p, c] : p;
    }

    return p; …
Run Code Online (Sandbox Code Playgroud)

javascript recursion transducer ramda.js

3
推荐指数
1
解决办法
421
查看次数

标签 统计

javascript ×1

ramda.js ×1

recursion ×1

transducer ×1