根据 Javascript 中子数组的对象对父数组进行重新分类
Re-categorize the parent array based on the child array's objects in Javascript
(也对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与数组中的新对象具有相同的值,则将原始对象弹出到新对象中。
这种方法失败了。
我推荐一个后端解决方案(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 );
?>
相关文章:
- javascript处理一个对象数组以获得一个新的对象数组
- 如何在javascript上向数组的对象添加新元素
- 如何基于数组值创建新实例
- 如果数组仍在执行,async.forEach()将运行我添加到数组中的新元素
- underline-js:将键对象与数组键对象进行比较,如果存在,则移除现有的添加新的
- 在2D数组中动态推送新列
- csv数据中的新数组
- 将新类实例中的数据存储在数组中
- 在Knockout中将新项添加到对象数组
- JavaScript-通过类似的属性查找对象,并将其推送到一个新的数组中
- javascript函数,它将数组作为输入,将每个数组元素增加1,并返回增加值的新数组
- 按值名称过滤掉重复的对象,并将其放入新数组中
- 根据对多个数组唯一的元素创建一个新数组
- 从数组javascript创建新对象
- 为新对象添加函数,将对象添加到数组中.理解困难'这'关键字
- 使用javascript/jquery从现有数组中创建一个新数组,该数组保存项目存在的次数
- 数组从php到javascript(需要新的决策)
- 为什么它在创建json对象时创建数组新数组
- 如何添加数组新键值(javascript)
- 数组新方法