0

これは例がないと説明しにくいので、変なタイトルでごめんなさい。

データでいっぱいの JSON オブジェクトがあります。このデータの一部は関連していますが、すべて単一のオブジェクトにあり、ネストされていません。オブジェクトがネストされているかどうかを確認する唯一の方法は、ID フィールドを確認することです。

ID の例:

[0] => Item_1
[1] => Item_1.Item_1a
[2] => Item_1.Item_1a.Item_1b
[3] => Item_2
[4] => Item_2.Item_2a
[5] => Item_3


// 0 is a root item
// 1 would belong to 0
// 2 would belong to 1
// 3 is a root item
// 4 would belong to 3
// 5 is a root item

私が終わらせたいのは

[0] => Item_1->subAttributes = [0] => Item_1a, [1] => Item 1b
[1] => Item_2->subAttributes = [0] => Item_2a
[2] => Item_3 // Since it has no sub attributes I want to remove it.

いくつかの方法を試してみましたが、1 つのレベルを簡単にネストできますが、複数のレベルをネストすると迷子になります。

属性をループして、ID を分割して.から、ID 部分をループして並べ替えようとしましたが、行き詰まっています。私はJSでこれをやろうとしています。

これは私がこれまでに試したすべてです...一部はコメントアウトされていますが、それは正しく機能していなかったため、別の方向を試しました.

function getNestedAttributes(attrs)
{
    var nested = [],
        nestedTmp = 0,
        subAttributes = [],
        currIndex = 0;
        subIndex = 0;

    for ( var i=0; i<attrs.length; i++ )
    {
        // splitId returns an array of elements split by .
        var idLevels = splitId(attrs[i].id),
            flag = false,
            tempObj = {};

        for ( var n=0; n<idLevels.length; n++ )
        {
            // console.log(attrs[i]);

            // array_key_exists is a JS function made to mimic php's array_key_exists
            if ( ! array_key_exists(idLevels[n], nested) )
            {
                // console.log(idLevels[n], 'is new');
                if ( ! flag )
                {
                    console.log(idLevels[n], attrs[i].name);
                    nested[idLevels[n]] = attrs[i];
                }
                else
                {
                    // console.log('FLAG!', idLevels[n], attrs[i].name);
                    console.log(nested[flag]);
                }
            }
            else
            {
                // console.log(idLevels[n], 'is not new');
                flag = idLevels[n];
            }
        }

        // if ( idLevels.length == 1 )
        // {
        //  // Parent Item
        //  currIndex = nested.push(attrs[i]);
        //  subAttributes = [];
        // }
        // else
        // {
        //  if ( idLevels.length > 2 )
        //  {
        //      // nestedTmp = nested[currIndex-1][subIndex];
        //      // subAttributes.push(attrs[i]);
        //      console.log(attrs[i].name);
        //  }
        //  else
        //  {
        //      nestedTmp = nested[currIndex-1];
        //      // subAttributes.push(attrs[i]);
        //  }

        //  subAttributes.push(attrs[i]);
        // }

        // // nested[currIndex-1].subAttributes = subAttributes;
        // nestedTmp.subAttributes = subAttributes;
    }

    //console.log(nested);
}
4

0 に答える 0