(Also open to a php solution)
If I have an array within an array, how do you re-categorize the parent array based on the child array's objects?
Here is an example of what I would like to achieve:
Say if the original array is:
[
{
"name":"Jade",
"tags":[
"developer"
]
},
{
"name":"Bridge",
"tags":[
"cook"
]
},
{
"name":"Ever",
"tags":[
"artist"
]
},
{
"name":"Noah",
"tags":[
"artist",
"developer"
]
}
]
I want to be able to re-categorize it into:
[
"artist": {
{
{
"name":"Noah",
"tags":[
"artist",
"developer"
]
}
}
"developer": {
{
"name":"Jade",
"tags":[
"developer"
]
},
{
"name":"Noah",
"tags":[
"artist",
"developer"
]
}
},
"cook": {
{
"name":"Bridge",
"tags":[
"cook"
]
},
}
]
Here is what I tried:
(the original array is var data)
var data = [original array]
var newArray = [];
for (var i = 0; i < data.length; i++) {
for (var a = 0; a < data[i].tags.length; a++) {
newArray[] = data[i].tags[a];
if (newArray[i] == data[i].tags[a]) {
newArray[i] = data[i];
}
}
}
My theory is to pop the tag (in tags) into a new array, and if the original object.tags has same value as the new object in the array, pop the original object into the new object.
This approach failed.
I'd recommend a backend solution (php) as it will be significantly faster as you scale up.
<?php
$sInFile = 'in.json';
$sOutFile = 'out.json';
$aDevelopers = array();
$aArtists = array();
$aCooks = array();
$sRaw = file_get_contents( $sInFile );
$aInData = json_decode( $sRaw );
$iCountData = count( $aInData );
for( $i = 0; $i < $iCountData; ++$i )
{
$iCountTags = count( $aInData[ $i ]->tags );
for( $j = 0; $j < $iCountTags; ++$j )
{
$aTmp = array();
if( ( !empty( $aInData[ $i ]->tags[ $j ] ) ) && $aInData[ $i ]->tags[ $j ] == 'developer' )
{
$aTmp[ 'name' ] = $aInData[ $i ]->name;
$aTmp[ 'tags' ] = $aInData[ $i ]->tags;
$aDevelopers[] = $aTmp;
}
$aTmp = array();
if( ( !empty( $aInData[ $i ]->tags[ $j ] ) ) && $aInData[ $i ]->tags[ $j ] == 'artist' )
{
$aTmp[ 'name' ] = $aInData[ $i ]->name;
$aTmp[ 'tags' ] = $aInData[ $i ]->tags;
$aArtists[] = $aTmp;
}
$aTmp = array();
if( ( !empty( $aInData[ $i ]->tags[ $j ] ) ) && $aInData[ $i ]->tags[ $j ] == 'cook' )
{
$aTmp[ 'name' ] = $aInData[ $i ]->name;
$aTmp[ 'tags' ] = $aInData[ $i ]->tags;
$aCooks[] = $aTmp;
}
}
}
$aFull[ 'developer'] = $aDevelopers;
$aFull[ 'artist' ] = $aArtists;
$aFull[ 'cook' ] = $aCooks;
$sFull = json_encode( $aFull );
file_put_contents( $sOutFile, $sFull );
?>