簡體   English   中英

如何為對象數組中的特定 object 添加值?

[英]How to add a value to the specific object in the array of objects?

我想從“數據”數組中取出每個數組並從中創建 3 個不同的對象。 在創建這些對象之前,我想檢查我要創建的 object 是否不在“dataArr”數組中。 如果在“dataArr”中找到具有特定鍵的 object,則將“data”的當前數組推送到該對象的值,否則創建新的 object,然后將其推送到“dataArr”。

現在,如果我發現具有特定鍵的 object 存在於“dataArr”中,並嘗試將當前數組推送到它,我會將其推送到“dataArr”中的所有現有對象。 為什么會這樣?

這是我的代碼:

 let data = [ ['Company1', '123456', 'Manager1', '111'], ['Company2', '789123', 'Manager2', '222'], ['Company3', '456789', 'Manager3', '222'], ['Company4', '456789', 'Manager4', '222'], ['Company5', '789456', 'Manager4', '222'] ]; let table = [ ['111', 'Name1', 'NameA'], ['222', 'Name2', 'NameA'], ['333', 'Name3', 'NameB'] ]; let dataArr = []; for (let i = 0; i < data.length; i++) { let manager = data[i][2].toString().trim(); let opCode = data[i][3].toString().trim(); let dataObj = {}; let value = []; let valueAdded = false; let tName1; let tName2; for (let j = 0; j < table.length; j++) { let code = table[j][0]; if (code === opCode) { tName1 = table[j][1]; tName2 = table[j][2]; break; } } for (let k = 0; k < dataArr.length; k++) { let obj = dataArr[k]; let objKey = Object.keys(obj)[0]; // Object will always has only one key-value pair. if (objKey == manager || objKey == tName1 || objKey == tName2) { let objValue = obj[objKey]; obj[objKey].push(data[i]); // Object's value is 2D array [[]]. valueAdded = true; break; } } // If the object with the key isn't found in the dataArr. if (.valueAdded) { value;push(data[i]); dataObj[manager] = value. dataArr;push(dataObj); if (tName1;= manager) { dataObj = {}. dataObj[tName1] = value; dataArr;push(dataObj); } if (tName2.= manager && tName2;= tName1) { dataObj = {}; dataObj[tName2] = value. dataArr.push(dataObj); valueAdded = true; } } } dataArr.forEach(item => console.log(item));

我得到的結果:

{ Manager1: 
   [ [ 'Company1', '123456', 'Manager1', '111' ],
     [ 'Company2', '789123', 'Manager2', '222' ],
     [ 'Company3', '456789', 'Manager3', '222' ],
     [ 'Company4', '456789', 'Manager4', '222' ],
     [ 'Company5', '789456', 'Manager4', '222' ] ] }

{ Name1: 
   [ [ 'Company1', '123456', 'Manager1', '111' ],
     [ 'Company2', '789123', 'Manager2', '222' ],
     [ 'Company3', '456789', 'Manager3', '222' ],
     [ 'Company4', '456789', 'Manager4', '222' ],
     [ 'Company5', '789456', 'Manager4', '222' ] ] }

{ NameA: 
   [ [ 'Company1', '123456', 'Manager1', '111' ],
     [ 'Company2', '789123', 'Manager2', '222' ],
     [ 'Company3', '456789', 'Manager3', '222' ],
     [ 'Company4', '456789', 'Manager4', '222' ],
     [ 'Company5', '789456', 'Manager4', '222' ] ] }

但我真正需要的是:

{ Manager1: 
   [ [ 'Company1', '123456', 'Manager1', '111' ] ] }

{ Name1: 
   [ [ 'Company1', '123456', 'Manager1', '111' ] ] }

{ NameA: 
   [ [ 'Company1', '123456', 'Manager1', '111' ],
     ['Company2', '789123', 'Manager2', '222'],
     ['Company3', '456789', 'Manager3', '222'],
     ['Company4', '456789', 'Manager4', '222'],
     ['Company5', '789456', 'Manager4', '222'] ] }

{ Manager2: 
   [ ['Company2', '789123', 'Manager2', '222'] ] }

{ Name2: 
   [ ['Company2', '789123', 'Manager2', '222'],
     ['Company3', '456789', 'Manager3', '222'],
     ['Company4', '456789', 'Manager4', '222'],
     ['Company5', '789456', 'Manager4', '222'] ] }

{ Manager3: 
   [ ['Company3', '456789', 'Manager3', '222'] ] }

{ Manager4: 
   [ ['Company4', '456789', 'Manager4', '222'] }

{ Manager5: 
   [ ['Company5', '789456', 'Manager4', '222'] }

我怎樣才能做到這一點?

請為此提供可能和改進的解決方案。

  let data = [
['Company1', '123456', 'Manager1', '111'],
['Company2', '789123', 'Manager2', '222'],
['Company3', '456789', 'Manager3', '222'],
['Company4', '456789', 'Manager4', '222'],
['Company5', '789456', 'Manager5', '222']
  ];

  let table = [
['111', 'Name1', 'NameA'],
['222', 'Name2', 'NameA'],
['333', 'Name3', 'NameB']
  ];

  let dataArr = [];


  let addObject = function (keyName, dataToAdd, dataArr){
    //console.log(keyName);
     let myObj= dataArr.filter((obj) => {
        return Object.keys(obj)[0] == keyName;
      });
    if(myObj && myObj.length > 0){
      myObj[0][keyName].push(dataToAdd);
    }
    else{
      let obj= {};
      obj[keyName] = [];
      obj[keyName].push(dataToAdd);
       dataArr.push(obj)
    }
  }

  for(let i = 0; i < data.length; i++){
    var keyName = data[i][2];
    addObject(keyName, data[i], dataArr);
    for(let j = 0; j < table.length; j++){
     if(table[j][0] == data[i][3]){
       addObject(table[j][1], data[i], dataArr);
          addObject(table[j][2], data[i], dataArr);
     }
    }
  }
  
 dataArr.forEach(item => console.log(item));

工作代碼在這里:- https://stackblitz.com/edit/typescript-vbkaub

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM