Javascript forloop 更改为 lodash

Javascript forloop change to lodash

需要将 javascript 代码更改为 lodash

var templates = {
"category": {
    "findByName": {
        "method": "generic",
            "settings": {
            "baseURL": "some2"
        }
    }
},
"product": {
    "findByPartNumber": {
        "method": "generic",
            "settings": {
            "baseURL": "some1"
        }
    },
    "findByUniqueId": {
        "method": "generic",
        "settings": {
            "baseURL": "some1"
        }
    }
}
};


for ( var index in templates) {
    var module = templates[index];

    for ( var fileIndex in module) {

        if (module[fileIndex].method) {

            var dsSettings = module[fileIndex].settings;
           console.log(dsSettings)
        }
    }
}

结果:

{ baseURL: 'some2' }
{ baseURL: 'some1' }
{ baseURL: 'some1' }

Lodash 代码:

_.forEach(templates, function(n, key) {
    var v = _.pluck(_.filter(n), 'settings');

    console.log(v);
});

结果:

[ { baseURL: 'some2' } ]
[ { baseURL: 'some1' }, { baseURL: 'some1' } ]

我正在寻找上面给出的 lodash 代码中的对象结果。请推荐

您可以使用 _.flatten

var target = [];

_.forEach(templates, function(n, key) {
    target.push(_.pluck(_.filter(n), 'settings'));
});

target = _.flatten(target);

http://jsbin.com/nedeviyiko/1/edit?html,js,output

我确实喜欢这个..有没有更好的方法来解决这个问题?

_.forEach(templates, function(n) {
    _.forEach(_.pluck(_.filter(n), 'settings'), function(obj) {
        console.log(obj);
    });
});

lodash 中的 pluck 和 filter 总是 return 数组,所以如果你 console.log 这些函数的输出你总是会得到一个数组,而不仅仅是一个对象列表。您需要遍历 v 中包含的数组和 console.log 每个值。

请注意:您为什么使用 _.filter? pluck 不应改变底层对象,因此没有理由过滤或克隆对象 n

单线怎么样:

settings = _(templates).map(_.values).flatten().pluck('settings').value()

var templates = {
    "category": {
        "findByName": {
            "method": "generic",
            "settings": {
                "baseURL": "some2"
            }
        }
    },
    "product": {
        "findByPartNumber": {
            "method": "generic",
            "settings": {
                "baseURL": "some1"
            }
        },
        "findByUniqueId": {
            "method": "generic",
            "settings": {
                "baseURL": "some1"
            }
        }
    }
};


settings = _(templates).map(_.values).flatten().pluck('settings').value()
document.write("<pre>" + JSON.stringify(settings,0,3));
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/3.5.0/lodash.js"></script>