(也适用于php解决方案)
如果我在一个数组中有一个数组,你如何根据子数组的对象重新分类父数组呢?
以下是我想要实现的一个例子:
假设原始数组是:
[
{
"name":"Jade",
"tags":[
"developer"
]
},
{
"name":"Bridge",
"tags":[
"cook"
]
},
{
"name":"Ever",
"tags":[
"artist"
]
},
{
"name":"Noah",
"tags":[
"artist",
"developer"
]
}
]
我希望能够将其重新分类为:
[
"artist": {
{
{
"name":"Noah",
"tags":[
"artist",
"developer"
]
}
}
"developer": {
{
"name":"Jade",
"tags":[
"developer"
]
},
{
"name":"Noah",
"tags":[
"artist",
"developer"
]
}
},
"cook": {
{
"name":"Bridge",
"tags":[
"cook"
]
},
}
]
以下是我的尝试:
(原始数组是var数据)
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];
}
}
}
我的理论是将标记(在标记中)弹出到一个新数组中,如果原始object.tags与数组中的新对象具有相同的值,则将原始对象弹出到新对象中。
这种方法失败了。
答案 0 :(得分:0)
我建议使用后端解决方案(php),因为随着扩展,它会明显加快。
<?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 );
?>