天天看點

渲染評論

1、資料改造

渲染評論

根據評論的父評論id,将其放在父評論的child屬性内

方案一(for循環):

//放未回複别人的一級評論的數組
let arr1=[];

for(var i=0;i<arr.length;i++)
{
    if(arr[i].parent_id==null)
    {
        arr1.push(arr[i]);
    }
    
    //給每個評論建立child屬性的數組
    arr[i].child=[];

    //根據comment_id和parent_id比對,相同則放進comment_id的child屬性裡
    //此時已經完成資料的改造,每個評論都有自己的子評論,而該條評論又可能是其他評論的子評論
    for(var j=0;j<arr.length;j++)
    {
        if(arr[i].comment_id==arr[j].parent_id)
        {
            // console.log( arr[i].child)
            arr[i].child.push(arr[j]);
        }
    }
}

console.log(arr);
           
渲染評論

方式二(遞歸):

先找到未有parent_id的一級評論,然後根據這些評論的comment_id來周遊所有元素的
parent_id,找到這些評論的子評論,再根據子評論的comment_id來周遊所有元素的
parent_id進而找到子評論的子評論,這種方式能找到所有一級評論的子評論及其子評論的子評論

function fn(temp)
{   let arr1=[];
	
    for(var i=0;i<arr.length;i++)
    { 
        if(arr[i].parent_id==temp)
        {
            arr1.push(arr[i]);
            arr[i].child=fn(arr[i].comment_id);  
        }
    }

    return arr1;
}
const res=fn(null);

如何找到二級評論以後的評論中贊數最多的,并根據贊數排序;
	從改造後的資料中去到對應的二級評論,遞歸所有二級評論之後的評論,
	全部放進一個數組,然後排序數組


總結:
	第一種方式,所有評論都附加了child,循環結束後,還需要将為null的一級評論拿出來才是最終結果
	第二種方式,隻會有為null的評論及其子評論有child(對象的引用),傳回值直接拿出來即可