Javascript JS-如何循环其他对象数组中的数组

Javascript JS-如何循环其他对象数组中的数组,javascript,Javascript,我有一个这样的结构 [ {"id": "as2is0", "replies": [{"id": "e345k2e", "replies": [. . .]} ]}, {"id": "2ishkl8"} ] . . . 很难预测一条评论有多少回复。我基本上想循环浏览每一条评论,无论是回复还是顶级评论。我该怎么做?其他回复也可能有回复,因此我的基本循环解决方案不起作用。您需要的是一个递归函数,这意味着它在某些条件下会调用自身。这里有一个例子 const数据=[ { id:“abc

我有一个这样的结构

[
    {"id": "as2is0", "replies": [{"id": "e345k2e", "replies": [. . .]} ]},
    {"id": "2ishkl8"}
] . . .

很难预测一条评论有多少回复。我基本上想循环浏览每一条评论,无论是回复还是顶级评论。我该怎么做?其他回复也可能有回复,因此我的基本循环解决方案不起作用。

您需要的是一个递归函数,这意味着它在某些条件下会调用自身。这里有一个例子

const数据=[
{
id:“abc”,
答复:[
{id:“def”,答复:[
{id:'ghi',答复:[]}
]} 
]
},
{
id:“jkl”,
答复:[
{id:“mno”,答复:[
{id:'pqr',回复:[]}
]} 
]
}
]
功能日志回复(数据){
data.forEach(项=>{
console.log('id:',item.id);
如果(项目.答复){
记录答复(项目.答复);
}
});
}
日志(数据)这里有一个非常简单的方法,只需打印
id
即可开始:

const数据=[{
id:“as2is0”,
答复:[{
id:“e345k2e”,
答复:[{
id:“e34112e”,
答复:[]
}]
}]
},
{
“id”:“2ishkl8”
}
]
//请注意,该函数接受数组作为参数
const getComments=arr=>arr.forEach(x=>{/如果您有兴趣首先检索扁平化的注释,而不是直接在其上循环(其他答案都指向它),则可以执行以下操作:

const注释=[
{“id”:“as2is0”,“回复”:[{“id”:“e345k2e”,“回复”:[]}],
{“id”:“2ishkl8”}
];
函数GetFlattedComments(注释){
const flattedComments=[];
对于({回复,..commentWithoutReplies}条评论){
扁平化评论。推送(评论无回复);
如果(答复){
push(…GetFlattedComments(回复));
}
}
返回评论;
}

日志(GetFlattedComments(comments));
您需要使用递归来解决您的问题。我不确定您想对每个回复做什么,或者对每个子注释需要做什么操作,但在我下面的代码片段中,我假设您想在树状结构中解析它们,用缩进标记它们在树中的级别

当然,您可以更改解析代码,并将其替换为案例中所需的任何操作

//下面是我构建嵌套注释的复杂层的尝试
var注释=[
{“id”:“as2is0”,“回复”:[
{“id”:“e345k2e”,“回复”:[]},
{“id”:“f12ba55”,“回复”:[{“id”:“st123abc”,“回复”:[{“id”:“y345k2e”,“回复”:[]}]},
{“id”:“k345k2e”,“回复”:[{“id”:“q96yyt”,“回复”:[]}],
{“id”:“2ishkl8”}
];
//从外部级别开始,分别解析每个元素
注释.forEach(功能(c){
log(parse(c));
});
//parse函数接受两个参数:comment对象和level
函数解析(c,lvl){
//如果未指定级别,则假定为根级别
如果(!lvl){lvl=0}
//如果当前评论不包含回复或空数组:
如果(!c.repries | | c.repries.length==0){
返回c.id;
}否则{
//生成包含所有嵌套回复的字符串
var str=c.id+“:”;
//遍历当前评论的所有回复
c、 答复.forEach(函数(r){
str+=“\n”;//添加新行
str+=(“”)。重复(lvl+1);//根据级别缩进回复
str+=parse(r,(lvl+1));//递归调用parse cunction
//但更深一层
});
返回str;
}

}
我假设您已经有了递归解决方案…转换为“基本循环”我认为这不是一个有效的数组语法开始…它看起来更像一个对象。数组应该包含项,而不是键和值对。正如@RubyRacer提到的,语法不正确。请发布一个具有有效格式的实际数据样本。@Jeto抱歉,我现在发布了它的外观。我已经在下面发布了我的答案考虑到评论和回复的级别很重要。也许你想做一些不同的事情来获得深入的评论/回复