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