Reputation: 796
I have a response from an xhr that looks like this:
{
"9994921432": {
"name": "name 1",
"ownerid": "543624"
},
"9979509360": {
"name": "some name",
"ownerid": "765875"
},
"9979524523": {
"name": "some other name",
"ownerid": "215654"
},
"9979524523": {
"name": "some name",
"ownerid": "65893"
}
}
And im trying to filter it based on the value of "name", if possible with a "one-liner" (and I can't use jQuery). I am testing something like this:
var response = '{ "9994921432": { "name": "the name", "ownerid": "543624" }, "9979509360": { "name": "some name", "ownerid": "765875" }, "9979524523": { "name": "some name", "ownerid": "215654" }, "9979524523": { "name": "some other name", "ownerid": "65893" } }';
var json = JSON.parse( '[' + response + ']' );
var filtered = json.filter( function ( item ) { return item.name == 'some name' } );
console.log( filtered );
But filtered
is empty.
How can I get an object like json
but containing only the objects which name == "some name"
?
Upvotes: 0
Views: 11825
Reputation: 2854
Try as follows. You have to loop through object and not an array.
var response = '{ "9994921432": { "name": "the name", "ownerid": "543624" }, "9979509360": { "name": "some name", "ownerid": "765875" }, "9979524523": { "name": "some name", "ownerid": "215654" }, "9979524524": { "name": "some other name", "ownerid": "65893" } }';
var json = [];
var resObj = JSON.parse(response);
for(var key in resObj) {
if(resObj[key].name == 'some name') {
json.push(resObj[key]);
}
}
console.log(json);
Upvotes: 1
Reputation: 796
Solved it using this code:
var response = '{ "9994921432": { "name": "the name", "ownerid": "543624" }, "9979509360": { "name": "some name", "ownerid": "765875" }, "9979524523": { "name": "some name", "ownerid": "215654" }, "45756745675": { "name": "some name", "ownerid": "65893" } }';
var json = JSON.parse( response );
var filtered = {};
Object.keys( json ).forEach( function( key ) {
if( json[key].name == "some name" ) {
filtered[key] = json[key];
}
});
console.log( filtered );
Not the one-liner I wanted but does the job.
Upvotes: 0