Lodash double where

Lodash double where

我有一个具有以下结构的 JS 数组:

[
{group: 'group1', addons: [{name: 'addon1', price: '100'}, {name: 'addon2', price: '130'}] },
{group: 'group2', addons: [{name: 'addon3', price: '150'}] },
{group: 'group3', addons: [{name: 'addon4', price: '200'}] }
]

所以它是一组数组,每个组包含一组 addons

如何在 lodash 的帮助下实现 getAddon(addonName) 方法?用2个for/foreach循环做起来很简单,但也许有更简单的方法?

例如 getAddon('addon1') 应该 return {name: 'addon1', price: '100'} - 第一个找到的加载项条目。

我是如何实现的,抱歉打字稿代码:

public getAddon(addonName: string): _IAddonModel {

            if (!this.groups) return null;

            //todo refactor using underscore/lodash
            for (var i = 0; i < this.groups.length; i++) {
                var group = this.groups[i];

                for (var j = 0; j < group.addons.length; j++) {
                    var addon = group.addons[j];

                    if (addon && addon.name === addonName) {
                        return addon;
                    }
                }
            }

            return null;
        }

谢谢。

var result = _(data)
    .pluck('addons')
    .flatten()
    .findWhere({name: 'addon3'});

http://jsfiddle.net/4g4wbu13/1/

所以你 - pluck() all the nested addons arrays, flatten() them in a single level depth array, and use findWhere() 获取特定项目。