繁体   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