【问题标题】:Making a collection of child nodes in Lodash在 Lodash 中创建子节点的集合
【发布时间】:2016-12-04 03:31:16
【问题描述】:

我有一个数据结构,其中有机会,每个机会都有注释。我想记下与一个人相关的所有机会的所有笔记并展示给他们。现在我有以下内容,它有效。但是,我在想必须有一种更简单的方法,我不能拥有外部数组,而是从机会NotesList 返回与 .value() 相同的结果。

    const thisNotes = {}
    const opportunityNotesList = _(opportunities)
        .map((opportunity, id) => ({id, ...opportunity}))
        .filter(opportunity => opportunity.linkToContact === id)
        .map(opportunity => {
            _(opportunity.notes)
                .map((note, id) => ({id, ...note}))
                .each(note  => {
                    thisNotes[`${note.id}`] = note
                })
        })

真的只是在寻找一种更优雅的方式来完成这个查询。

【问题讨论】:

    标签: reactjs lodash


    【解决方案1】:

    使用_.flatMap 避免嵌套循环

     const thisNotes = _(opportunities)
        .filter({linkToContact: id})
        .flatMap('notes')
        // way 1 - if id is really necessary
        .map((note, id) => ({id, ...note}))
        .keyBy('id')
        // way 2 - if id is unnecessary
        .reduce(function(result, note, id) {
            result[id] = note;
            return result;
        }, {});
    

    【讨论】:

    • 如果您保留.map(),您可以将.reduce() 替换为.keyBy('id')
    【解决方案2】:

    我建议不要试图太优雅。我已经很难跟踪上面的代码了,想象一下另一个开发人员必须拿起它并做出改变!

    将它分成它自己的助手,或者更好的选择器(例如使用reselect)。

    我同意,随着时间的推移,这种转变会变得相当痛苦——这是我似乎一直在头疼的一件事。

    【讨论】:

      猜你喜欢
      • 2019-08-02
      • 1970-01-01
      • 2017-01-21
      • 1970-01-01
      • 1970-01-01
      • 2016-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多