BunnyDev
BunnyDev

Reputation: 11

Search inside a JSON Javascript

I have a problem concern search JSON string and i have JSON string

{"userDetail":[
 {
   "Name": "Scottic Mangry",
   "Age" : "12", 
 },
 {
   "Name": "Joneson Mangly",
   "Age" : "18", 
 },
 {
   "Name": "Saoyu Wang",
   "Age" : "15", 
 },
]}

And data search

let searchObj = "Mang"

I need a result

 {
   "Name": "Scottic Mangry",
   "Age" : "12", 
 },
 {
   "Name": "Joneson Mangly",
   "Age" : "18", 
 }

Any help or suggestions would be great!

Upvotes: 0

Views: 95

Answers (4)

Chang Alex
Chang Alex

Reputation: 517

Just a simple filter.

({"userDetail":[
 {
   "Name": "Scottic Mangry",
   "Age" : "12", 
 },
 {
   "Name": "Joneson Mangly",
   "Age" : "18", 
 },
 {
   "Name": "Saoyu Wang",
   "Age" : "15", 
 },
]}).userDetail.filter(e=>e.Name.includes("Mang"))

Upvotes: 0

Brett Gregson
Brett Gregson

Reputation: 5923

Something like:

let data = {
    "userDetail":[
     {
       "Name": "Scottic Mangry",
       "Age" : "12", 
     },
     {
       "Name": "Joneson Mangly",
       "Age" : "18", 
     },
     {
       "Name": "Saoyu Wang",
       "Age" : "15", 
     },
    ]
}

let needle = "Mang";
let result = data['userDetail'].filter(el => el.Name.includes(needle));
console.log(result); 

needle is the string we are searching for inside the Name property of the data.userDetail object

includes is case sensitive, so if you want to match results regardless of case it's easiest to lowercase everything first

Upvotes: 2

TAHER El Mehdi
TAHER El Mehdi

Reputation: 9253

As cmgchess say in comments Using filter and includes would do the job for you: to make it more declarative and readable I put it inside a function called findName

const objs = {
  "userDetail": [{
      "Name": "Scottic Mangry",
      "Age": "12",
    },
    {
      "Name": "Joneson Mangly",
      "Age": "18",
    },
    {
      "Name": "Saoyu Wang",
      "Age": "15",
    },
  ]
}

function findName(name) {
  return objs.userDetail.filter(user => user.Name.includes(name))
}
let searchObj = "Mang";
console.log(findName(searchObj));

Upvotes: 0

R4ncid
R4ncid

Reputation: 7139

you can do it using Array.filter, Array.values and includes

const data = {"userDetail":[
 {
   "Name": "Scottic Mangry",
   "Age" : "12", 
 },
 {
   "Name": "Joneson Mangly",
   "Age" : "18", 
 },
 {
   "Name": "Saoyu Wang",
   "Age" : "15", 
 },
]}


const search = (data, search) => data.filter(d => Object.values(d).some(v => v.includes(search)))

console.log(search(data.userDetail, "Mang"))

Upvotes: 0

Related Questions