我试图解剖一个深度嵌套的对象。遍历它并将数据拉到一个单个级别的对象,然后再与一个更大的对象结合在一起。我可以用下面的代码遍历它,但它不是动态的。这只有在我知道它的4个物体深度的情况下才起作用。实际上它可以是1->n深。我还有一个函数,它在该级别检查值的类型,并对其进行相应的处理。现在这对我很管用
const pivotInfo = []
const topLevelObjects = pivotResponse.pivots.pivotObjects[pivotsString]
for(const level0 of topLevelObjects){
let newPivotInfo = {}
//This is assuming you can only pivot 4 deep.
newPivotInfo[level0.field] = level0.value
if(level0.pivot){
for(const level1 of level0.pivot){
newPivotInfo = {...newPivotInfo, ...buildBasedOnType(level1, newPivotInfo)}
if(level1.pivot){
for(const level2 of level1.pivot) {
newPivotInfo = {...newPivotInfo, ...buildBasedOnType(level2, newPivotInfo)}
if(level2.pivot){
for(const level3 of level2.pivot) {
newPivotInfo = {...newPivotInfo, ...buildBasedOnType(level3, newPivotInfo)}
}
}
}
}
}
}
pivotInfo.push(newPivotInfo)
}
这里是顶层
{
'pivotvalue0,pivotvalue1,pivotvalue2,pivotvalue3': [
{
field: 'pivotvalue0',
value: '200275399',
count: 36,
pivot: [Array]
},
{
field: 'pivotvalue0',
value: '200746617',
count: 23,
pivot: [Array]
}
]
}
下面是每一个级别:
{
field: 'pivotvalue1',
value: 'Yes',
count: 27,
pivot: [
{ field: 'pivotvalue2', value: 'Hello', count: 27, pivot: [Array] }
]
}
{
field: 'pivotvalue1',
value: 'Maybe',
count: 9,
pivot: [
{ field: 'pivotvalue2', value: 'Hello', count: 9, pivot: [Array] }
]
}
{
field: 'pivotvalue1',
value: 'No',
count: 23,
pivot: [
{ field: 'pivotvalue2', value: 'World', count: 12, pivot: [Array] },
{ field: 'pivotvalue2', value: 'Mars', count: 11, pivot: [Array] }
]
}
希望这是足够的上下文来了解我当前在做什么。现在,我有数据可以通过一个数组的值知道这些对象的深度。这样我就可以检查阵列长度,知道我需要去多深。什么是最好的方法使这一动态?所以它会弯曲到'n'深度,而不是编码为4的头部。
谢谢!
使用递归来实现这一点。
null
var data = [
{
field: 'pivotvalue0',
value: '200275399',
count: 36,
pivot: [{
field: 'pivotvalue0.1',
value: '200275399',
count: 36,
pivot: [{
field: 'pivotvalue0.2',
value: '200275399',
count: 36,
pivot: []
}]
}]
},
{
field: 'pivotvalue0',
value: '200746617',
count: 23,
pivot: []
}
]
var finalResult = [];
function accumulateValue(data){
data.forEach(item=>{
finalResult.push({
field: item.field,
value: item.value,
count: item.count,
});
if(item.pivot && item.pivot.length){
accumulateValue(item.pivot)
}
})
}
accumulateValue(data)
console.log(finalResult);
问题内容: 我试图遍历嵌套对象以检索由字符串标识的特定对象。在下面的示例对象中,标识符字符串是“ label”属性。我无法解决如何遍历树以返回适当对象的问题。任何帮助或建议,将不胜感激。 问题答案: 您可以创建像这样的递归函数来对对象进行深度优先遍历。 可以这样称呼
问题内容: 我目前有这个: test.json看起来像这样: 我越来越: 如何更改它,以便无论我拥有多少嵌套值,它都将循环遍历所有嵌套项目? 所以对于上面的例子,我会得到 问题答案: 您可以创建一个递归循环函数,但是会遇到一个问题:当属性是对象时,因为没有字符串,所以没有文本可显示。因此,您将得到: 因为while 是为项目#2显示的字符串,所以它是为项目#1显示的对象。 无论如何,这就是我组成的
问题内容: 我必须遍历json数组对象。 它具有以下结构。 基本上我在做的是prod_1是产品的名称,并且prod_1的版本列表已填充在其中。 所以现在我想要的是产品的名称以及它的版本。 问题在于可能有很多产品和该产品下的许多版本。所以我需要可以在 javascript 中使用适当的循环结构来对其进行处理。 最好将循环将产品名称存储在一个变量中,将版本存储在另一个变量中,因为我需要对产品名称进行一
def deep(root): if not root: return print root.data deep(root.left) deep(root.right) if __name__ == '__main__': lookup(tree) deep(tree)
问题内容: 我的数据库中有一个表,其中使用混合嵌套集(MPTT)模型(具有和的值)和邻接列表模型(存储在每个节点上)存储树结构。 这个问题与树的任何MPTT方面都不相关,但是我想我将其保留,以防万一有人对如何利用它有个好主意。 我想将别名的路径转换为特定的节点。例如:将找到别名为“ nickf”的节点,该节点是别名为“ admins”的节点的子节点,别名为“ users”的根节点。上有一个唯一索引
给定一个数组,构建二叉树,并且按层次打印这个二叉树