I want to take each array from the 'data' array and create 3 different objects from it. Before creating those objects I want to check if the object that I want to create is not already in the 'dataArr' array. If the object with specific key is found in the 'dataArr', then push the current array of 'data' to that object's value, else create the new object and then push it to the 'dataArr'.
Now if I found that the object with specific key exists in the 'dataArr', and try to push the current array to it, I get it pushed to all existing objects in the 'dataArr'. Why this is happening?
Here is my code:
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));
The result that I get:
{ 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' ] ] }
But what I actually need is this:
{ 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'] }
How can I achieve this?