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.

我尝试了几种不同的方法,我可以轻松地嵌套一层,但不止一层,我就会迷路。

我试过循环遍历属性,拆分 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