At underscore js, Can I get multiple columns with pluck method after input where method as linq select projection

后端 未结 7 1164
小蘑菇
小蘑菇 2021-01-30 12:59
var people = [
    {firstName : \"Thein\", city : \"ny\", qty : 5},
    {firstName : \"Michael\", city : \"ny\", qty : 3},
    {firstName : \"Bloom\", city : \"nj\", qty         


        
7条回答
  •  小蘑菇
    小蘑菇 (楼主)
    2021-01-30 13:56

    To project to multiple properties, you need map, not pluck:

    var results = _.map(
        _.where(people, {city : "ny"}), 
        function(person) {
            return { firstName: person.firstName, qty: person.qty };
        }
    );
    

    [{"firstName":"Thein","qty":5},{"firstName":"Michael","qty":3}]

    (Fiddle)

    Note that, if you wanted to, you could create a helper method "pluckMany" that does the same thing as pluck with variable arguments:

    // first argument is the source array, followed by one or more property names
    var pluckMany = function() {
        // get the property names to pluck
        var source = arguments[0];
        var propertiesToPluck = _.rest(arguments, 1);
        return _.map(source, function(item) {
            var obj = {};
            _.each(propertiesToPluck, function(property) {
                obj[property] = item[property]; 
            });
            return obj;
        });
    };
    

    You can use the _.mixin function to add a "pluckMany" function to the _ namespace. Using this you can write simply:

    var results = _.chain(people).where({city : "ny"}).pluckMany( "firstName", "qty").value();
    

    (Fiddle)

提交回复
热议问题