Get all matches given a value of an array of objects

0

What I want is that in the following arrangement when a value is entered in firstname I bring all the fixes with that value but with its lastname in an array:

     var persons = [
       {firstname : "Malcom", lastname: "Reynolds"},
       {firstname : "Kaylee", lastname: "Frye"},
       {firstname : "Jayne", lastname: "Cobb"},
       {firstname : "Kaylee", lastname: "Frye"},
       {firstname : "Jayne", lastname: "Freeman"},
       {firstname : "Kaylee", lastname: "Frye"},
       {firstname : "Jayne", lastname: "Summer"},
       {firstname : "Jayne", lastname: "Doe"}
                   ];

          /*Loop*/

And that I bring them looked like this (in any way) and I would do it for all values of firstname in the array:

   result = 'Jayne'{"Cobb","Freeman","Summer","Doe"}

My progress:

var dict = { };
personas.forEach(function (obj) {
    if (!dict[obj.firstname])
        dict[obj.firstname] = [];
    dict[obj.firstname].push(obj.lastname);
});
    
asked by Godeolo 01.02.2017 в 17:09
source

2 answers

1

var people = [
       {firstname : "Malcom", lastname: "Reynolds"},
       {firstname : "Kaylee", lastname: "Frye"},
       {firstname : "Jayne", lastname: "Cobb"},
       {firstname : "Kaylee", lastname: "Frye"},
       {firstname : "Jayne", lastname: "Freeman"},
       {firstname : "Kaylee", lastname: "Frye"},
       {firstname : "Jayne", lastname: "Summer"},
       {firstname : "Jayne", lastname: "Doe"}
];

var name = 'Jayne';

var matches = people
  .filter(x => x.firstname === name)
  .map(x => x.lastname);

var result = { [name]: matches };

console.log(result);
    
answered by 01.02.2017 в 17:39
-1

     var persons = [
       {firstname : "Malcom", lastname: "Reynolds"},
       {firstname : "Kaylee", lastname: "Frye"},
       {firstname : "Jayne", lastname: "Cobb"},
       {firstname : "Kaylee", lastname: "Frye"},
       {firstname : "Jayne", lastname: "Freeman"},
       {firstname : "Kaylee", lastname: "Frye"},
       {firstname : "Jayne", lastname: "Summer"},
       {firstname : "Jayne", lastname: "Doe"}
                   ];


var result= persons.reduce((acc, item) => {
  let { firstname, lastname } = item;
  acc[firstname] = acc[firstname] || [];
  acc[firstname].push(lastname);
  return acc;
}, {});

console.log(result);
    
answered by 01.02.2017 в 17:35