In backend PHP I have this defined in loop:
foreach ( $data as $res ){ $approved[ ] = [ 'id' => $count, 'title' => "some title" ]; $count++;$title=... )
and then final list is created:
$list[ ] = [ 'list' => 'approved', 'values' => $approved ]; return ['list' => $list ];
In javascript I am getting these results via ajax call:
this.myoutput = {}; this.http.get('backend_url).then(data => { let result = this.helper.isJson( data.response ) || [ ]; console.log(result); this.myoutput.approved = result.list.find( item => item.list === 'approved' ); console.log(this.myoutput.approved); })
The first console.log(result);
gives me all data something like:
list: (1) […] 0: {…} list: "approved" values: (13) […] 0: Object { id: "1", title: "aaa" } 1: Object { id: "2", title: "bbb" } 2: Object { id: "3", title: "ccc" }
but console.log(this.myoutput.approved);
gives me undefined. Is something what I am doing wrong here?
Advertisement
Answer
The key that holds your array values is named values
, not list
. So this should work:
this.myoutput = {}; this.http.get('backend_url).then(data => { let result = this.helper.isJson( data.response ) || [ ]; console.log(result); this.myoutput.approved = result.values.find( item => item.list === 'approved' ); console.log(this.myoutput.approved); })
But what are you trying to find? If you check the values array, it contains id
and title
, not list
? so to find one item in your array, something like:
this.myoutput.approved = result.values.find( item => item.id === "3" );
would make more sense to me. Note that if nothing is found, the find()
method will indeed return undefined
as per the specification: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find
Good luck!