如何使用ramda.js让这段代码可读性最高

发布于 2022-09-12 04:07:41 字数 802 浏览 25 评论 0

const isObject = (obj) => Object.prototype.toString.call(obj) === '[object Object]';
function toArray1(children) {
    const ret = children.reduce(
        (acc, cur) => {
            if (cur === null) return acc;
            if (Array.isArray(cur)) {
                acc = acc.concat(toArray1(cur));
            } else if (isObject(cur) && cur.props) {
                acc = acc.concat(toArray1(cur.props.children));
            } else {
                acc.push(cur);
            }
            return acc;
        },
        []
    );

    return ret;
}
const children = [
    1,
    null,
    [2, 3],
    {
        props: {
            children: [4, 5]
        }
    }
];
const ret = toArray1(children);
console.log(ret);

输出结果:[1, 2, 3, 4, 5]

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

别低头,皇冠会掉 2022-09-19 04:07:41
const children = [
    1,
    null,
    [2, 3],
    {
        props: {
            children: [4, 5]
        }
    }
]
const result = children.filter(o=>o!==null).flatMap(o=>o.props?o.props.children:o)
console.log(result)

这样你看可以嘛?

糖果控 2022-09-19 04:07:41

等待函数式玩的熟悉的同学指导一二呀

经过各种尝试现在改成:

const handleRecuce = (acc, cur) =>
    R.cond([
        [
            R.and(R.is(Object), R.has('props')),
            R.compose(R.concat(acc), R.prop('children'), R.prop('props'))
        ],
        [R.is(Array), R.concat(acc)],
        [R.T, R.flip(R.append)(acc)]
    ])(cur);
const toArray = R.compose(R.reduce(handleRecuce, []), R.filter(R.compose(R.not, R.isNil)));

如何在这里面使用递归还没研究出来
有研究的更深入的大佬,再给指导指导呀

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文