js 将array分层

作者提问如下:

我有一个叫hs的array,里面有h1h2h3element,比如:

[h1, h1, h2, h2, h2, h1, h2, h3, h3, h2]

如何把它分成向下面的层次?

[h1, h1, [h2, h2, h2], h1, [h2, [h3, h3], h2]]

然后将它存到tocList的一个array中。
谢谢!

js array分层完整的html解答代码如下:

<!DOCTYPE html>
<html>
<head>
 <title>js 将array分层 xinbiancheng.cn</title>
</head>
<body>
 <div>
  <h1>1</h1>
  <h1>1</h1>
  <h2>2</h2>
  <h2>2</h2>
  <h2>2</h2>
  <h1>1</h1>
  <h2>2</h2>
  <h3>3</h3>
  <h3>3</h3>
  <h2>2</h2>
 </div>
</body>
<script type="text/javascript">
 var div=document.querySelector('div');
 var arr =div.children
 console.log(arr);
 // 打印结果为  [h1, h1, h2, h2, h2, h1, h2, h3, h3, h2]
 // 构成了我们期望的数据
 var h1=[]
 var h2=[]
 var h3=[]
 for(i=0;i<arr.length;i++){
  if(arr[i].tagName=='H1'){
   h1.push(arr[i])
  }else if(arr[i].tagName=='H2')
  {
   if(arr[i-1].tagName=='H1'){
    h2=new Array();
   }
   h2.push(arr[i])
   if (i==arr.length-1||arr[i].tagName!=arr[i+1].tagName){
    h1.push(h2);
   }
  }else if(arr[i].tagName=='H3')
  {
   if(arr[i-1].tagName=='H2'){
    h3=new Array();
   }
   h3.push(arr[i])
   if (i==arr.length-1||arr[i].tagName!=arr[i+1].tagName){
    h2.push(h3)
    h2=[];
   }
  }
 }
 tocList=h1
 console.log(tocList)
</script>
</html>

var div=document.querySelector('div');  //得到div元素

var arr =div.children //得到div元素的孩子 即得到了 [h1, h1, h2, h2, h2, h1, h2, h3, h3, h2] 的模拟数据

后面的代码比较简单就过多解释

最后通过 console.log 打印的结果为: 

[h1, h1, [h2, h2, h2], h1, [h2, [h3, h3], h2]]