JS 數組對象根據某一相同key合並成新的數組


很久沒寫隨筆了,可能太安逸了!!!

 

例子:

    let arr = [
      { name: '小明',age: 20,school: '清華' },
      { name: '小紅',age: 21,school: '清華' },
      { name: '小白',age: 18,school: '北大' },
      { name: '小黃',age: 19,school: '北大' },
      { name: '小浪',age: 21,school: '哈佛' },
    ]

需求是將具有相同 “school” 的對象合並為新的數組

結果如下:

    let data = [
      {
        school: "清華",
        children: [
          { name: "小明", age: 20, school: "清華" },
          { name: "小紅", age: 21, school: "清華" },
        ]
      },
      {
        school: "北大",
        children: [
          { name: "小白", age: 18, school: "北大" },
          { name: "小黃", age: 19, school: "北大" },
        ]
      },
      {
        school: "哈佛",
        children: [
          { name: "小浪", age: 21, school: "哈佛" },
        ]
      },
    ]

 

解決方案一:

    handlerDatas(arr){
      // arr 傳過來的原數組  
      let tempArr = [];
      let endData = [];
      for (let i = 0; i < arr.length; i++) {
        if (tempArr.indexOf(arr[i].school) === -1) {
          endData.push({
            school: arr[i].school,
            children: [arr[i]]
          });
          tempArr.push(arr[i].school);
        } else {
          for (let j = 0; j < endData.length; j++) {
            if (endData[j].school == arr[i].school) {
              endData[j].children.push(arr[i]);
              break;
            }
          }
        }
      }
      console.log(endData); // 最終輸出
    },

 

解決方案二:

    handlerDatas(arr){
      let obj = {};
      arr.forEach((item, index) => {
          let { school } = item;
          if (!obj[school]) {
              obj[school] = {
                  school,
                  children: []
              }
          }
          obj[school].children.push(item);
      });
      let data = Object.values(obj); // 最終輸出
    },

 

還有其它的方案,可以自行百度。

以上解決方案借鑒了其他博主的文章

 

擴展延伸: 將數組對象改成對象數組

    let arr = [
      { name: '小明',age: 20,school: 'qinghua',},
      { name: '小紅',age: 21,school: 'qinghua',},
      { name: '小白',age: 18,school: 'beida',},
      { name: '小黃',age: 19,school: 'beida',},
      { name: '小浪',age: 21,school: 'hafo',},
    ]

    handlerDatas(arr){
      let obj = {};
      arr.forEach((item, index) => {
          let { school } = item;
          if (!obj[school]) {
              obj[school] = {
            school,
                  children: []
              }
          }
          obj[school].children.push(item);
      });
      let data = Object.values(obj);
      let newData = {};

      data.forEach((item, i) => {
        let key = item.school;
        let value = item.children;
        newData[key] = value;
      });
      console.log(newData); // 最終輸出
    },

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM