如果没有某种例子,这很难解释,所以我很抱歉这个奇怪的标题。
我有一个充满数据的 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);
}