javascript - 在Javascript中根据子数组的对象重新分类父数组

标签 javascript php arrays

(也开放给一个php解决方案)

如果我在一个数组中有一个数组,你如何根据子数组的对象重新分类父数组?<​​/p>

这是我想要实现的一个例子:

假设原始数组是:

[
 {
  "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中根据子数组的对象重新分类父数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28923163/

相关文章:

java - carrays.i 中的 SWIG 数组类是否释放它们包装的 C 分配数组?

javascript - 使用脚本/插件跟踪页面加载时间 - 就像 Google Analytics,但在我们自己的服务器上

javascript - Jquery 更新循环内的 div 并显示所有值

ios - 我有 2 个数组。如果在两个数组中都找到,则需要从其中一个数组中删除字符串

php - session 重新生成导致具有快速 AJAX 调用的 session 过期

php shell_exec bash.exe 在 Window XP IIS 中不工作

php - 从 PHP 的多维数组中获取数组值的数组

javascript - 如何处理中继突变中 Unresolved props?

javascript - 获取元素的内容宽度

javascript - 即使响应http状态为200,Jquery ajax错误回调也会执行