Home > Blockchain >  Search inside a JSON Javascript
Search inside a JSON Javascript

Time:07-11

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!

CodePudding user response:

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

CodePudding user response:

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"))

CodePudding user response:

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));

CodePudding user response:

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"))
  • Related