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