Sunday, June 2, 2024
139
rated 0 times [  145] [ 6]  / answers: 1 / hits: 38596  / 11 Years ago, sun, october 13, 2013, 12:00:00
var people = [
{firstName : Thein, city : ny, qty : 5},
{firstName : Michael, city : ny, qty : 3},
{firstName : Bloom, city : nj, qty : 10}
];

var results=_.pluck(_.where(people, {city : ny}), 'firstName');


For example : I need firstName and qty.


More From » underscore.js

 Answers
33

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)


[#75015] Saturday, October 12, 2013, 11 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
samir

Total Points: 145
Total Questions: 90
Total Answers: 89

Location: Tokelau
Member since Sun, May 7, 2023
1 Year ago
;