Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Search through array in an object using javascript without using a loop

I want to find a better, more elegant solution than using 2 iteration to find a value in an object. I looked at functions to search within an array such as find,indexOf but was wondering I could search through the object without using a for or forEach.

Let say I want to find all swimmers. What I got so far.

members = [
  { name: "Sue", hobby: ["Swimming", "Running", "Dancing"] },
  { name: "Sam", hobby: ["Cars", "Travelling"] },
  { name: "John", hobby: ["Reading", "Swimming"] },
  { name: "Rob", hobby: ["Running", "Coding"] },      
];
function findSwimmers(members, hobby) {      
  let swimmers = [];      
  members.forEach(function (e){        
    e.hobby.forEach(function (element){          
      if (element.toLowerCase() === hobby.toLowerCase()) {
        swimmers.push(e);
      }
    });
  });
  return swimmers;
}
like image 336
PWT Avatar asked Nov 16 '25 19:11

PWT


2 Answers

You can use filter in combination with some by passing callback functions as argument.

let members = [
  { name: "Sue", hobby: ["Swimming", "Running", "Dancing"] },
  { name: "Sam", hobby: ["Cars", "Travelling"] },
  { name: "John", hobby: ["Reading", "Swimming"] },
  { name: "Rob", hobby: ["Running", "Coding"] },      
];

function findSwimmers(members, hobby) {      
  return members_swimming = members.filter(({hobby}) => hobby.some(item => item == "Swimming"));
                                
}

console.log(findSwimmers(members, "Swimming"));
like image 179
Mihai Alexandru-Ionut Avatar answered Nov 19 '25 08:11

Mihai Alexandru-Ionut


You can use Array.filter() and Array.map() with destructuring:

var members = [
  { name: "Sue", hobby: ["Swimming", "Running", "Dancing"] },
  { name: "Sam", hobby: ["Cars", "Travelling"] },
  { name: "John", hobby: ["Reading", "Swimming"] },
  { name: "Rob", hobby: ["Running", "Coding"] },      
];
var swimmers = members.filter(({hobby}) => hobby.includes('Swimming')).map(({name}) => name);
console.log(swimmers)
like image 27
Ankit Agarwal Avatar answered Nov 19 '25 10:11

Ankit Agarwal



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!