js----數組對象中根據某個相同的屬性值合並其他項


    let arr = [
      { id: 1, list: { id: 66 } },
      { id: 1, list: { id: 44 } },
      { id: 2, list: { id: 55 } },
      { id: 2, list: { id: 33 } },
      { id: 3, list: { id: 11 } },
      { id: 3, list: { id: 22 } }
    ]

    let tempArr = [], newArr = []
    for (let i = 0; i < arr.length; i++) {
      if (tempArr.indexOf(arr[i].id) === -1) {
        newArr.push({
          id: arr[i].id,
          list: [arr[i].list]
        })
        tempArr.push(arr[i].id);
      } else {
        for (let j = 0; j < newArr.length; j++) {
          if (newArr[j].id == arr[i].id) {
            newArr[j].list.push(arr[i].list)
          }
        }
      }
    }

    console.log(newArr)

 

場景:

    getTableData() {
      this.$observer.$on("selectedProject", data => {
        let list = [];
        data.forEach(item => {
          if (item.select === 1) list.push(item);
        });
        this.tableData = list;
        console.log(data, this.tableData);
        this.tableData.forEach(item => {
          item.arr = this.merger(item.lisVos);
      // 根據reportTime排序 item.arr.sort(
function(a, b) { if (a.reportTime < b.reportTime) { return -1; } else if (a.reportTime == b.reportTime) { return 0; } else { return 1; } }); let str = ""; item.arr.forEach(ele => { str += ele.details + ";" + "\n"; }); item.details = str; }); }); }, // 傳入一個數組,將reportTime相同的對象中的name合並到details中 merger(arr) { let tempArr = [], newArr = []; for (let i = 0; i < arr.length; i++) { if (tempArr.indexOf(arr[i].reportTime) === -1) { newArr.push({ reportTime: arr[i].reportTime, name: [arr[i].name] }); tempArr.push(arr[i].reportTime); } else { for (let j = 0; j < newArr.length; j++) { if (newArr[j].reportTime == arr[i].reportTime) { newArr[j].name.push(arr[i].name) } } } }
    // 給newArr添加一個新字段details newArr.forEach(item
=> { item.details = item.reportTime + ":" + item.name }) return newArr; }

 

 


免責聲明!

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



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