二維數組之根據某個值來歸類

let finalArr = []
     checkListTogether.map((checkItem, index) => {
      if (finalArr.length) {
        const res = finalArr.some(ele => {
          if (ele.classCode === checkItem.classCode) {
            ele.students.push(checkItem);
          }
          return ele.classCode === checkItem.classCode;
        });
        if (!res) {
          finalArr.push({
            classCode: checkItem.classCode,
            schoolId: checkItem.schoolId,
            students: [{ ...checkItem }]
          });
        }
      } else {
        finalArr.push({
          classCode: checkItem.classCode,
          schoolId: checkItem.schoolId,
          students: [{ ...checkItem }]
        });
      }
    });
    -------------------------------------------------------
    <!--checkListTogether: [-->
    <!--    {-->
    <!--      classCode: checkItem.classCode,-->
    <!--      schoolId: checkItem.schoolId,-->
    <!--      name:'alex'-->
    <!--    }-->
    <!--]-->
    
    <!--finalArr: [-->
    <!--    {-->
    <!--      classCode: checkItem.classCode,-->
    <!--      schoolId: checkItem.schoolId,-->
    <!--      students:[
    <!--        {
    <!--          classCode: checkItem.classCode,-->
    <!--          schoolId: checkItem.schoolId,-->
    <!--          name:'alex'-->
    <!--        }
    <!--      ]-->
    <!--    }-->
    <!--]-->
複製代碼

請看以上代碼,業務需求是有一個一維數組checkListTogether相似上方的註釋。如今要根據每一項的classCode來作數據的歸類,最後由finalArr接收,形式就是把classCode提出來,相同classCode的對象在放到students,變成二位數組。數組

由於要提取checkListTogether中的項,因此遍歷checkListTogether。在每一次遍歷中又some遍歷finalArr,其中幹了兩件事。第一,若是匹配到了classCode,就Push到二維數組中。第二,返回是否匹配到的bollen,若是false表示當前一維數組的項在finalArr中沒有匹配到,就在finalAarr新加一個屬於這個classcode的項。spa

另外,初始finalArr沒有項,是不能遍歷的,因此判斷第一次要push進去一個值。code

相關文章
相關標籤/搜索