For this kind of array:
let combinazioniMat = [
["Person1", "Person2", "Person3", "Person4", "Person6"],
["Person1", "Person2", "Person3", "Person5", "Person6"],
["Person1", "Person2", "Person3", "Person6", "Person5"],
["Person1", "Person2", "Person4", "Person5", "Person6"],
["Person1", "Person2", "Person4", "Person6", "Person5"],
["Person1", "Person2", "Person5", "Person3", "Person6"],
["Person1", "Person2", "Person5", "Person4", "Person6"],
["Person1", "Person2", "Person5", "Person6", "Person4"],
["Person1", "Person2", "Person4", "Person3", "Person6"]
]
I want for each array to add each of the element of another array:
let mediciPom = ["Person1", "Person2"]
I tried to do like this, but it doesn't work...
let combinazioniTemp =[]
for (let combN=0; combN<combinazioniMat.length;combN ){
for (let med of mediciPom){
combinazioniMat[combN].push(med);
combinazioniTemp.push(combinazioniMat[combN]);
combinazioniMat[combN].pop()
}}
I'd like to obtain something like this:
[
["Person1", "Person2", "Person3", "Person4", "Person6", "Person1"],
["Person1", "Person2", "Person3", "Person5", "Person6", "Person2"],
["Person1", "Person2", "Person3", "Person6", "Person5", "Person1"],
["Person1", "Person2", "Person4", "Person5", "Person6", "Person2"],
["Person1", "Person2", "Person4", "Person6", "Person5", "Person1"],
...]
EDIT: Thanks for all the answers, but i realize that I need ALSO a way to insert the value ONLY if it isn't already in the array... Can you help me with that?
CodePudding user response:
Well if you want it to go in order and only add one element each time then:
let combinazioniTemp = combinazioniMat.map((e, i) => e.concat(mediciPom[i % mediciPom.length]));
Full Example:
let combinazioniMat = [
["Person1", "Person2", "Person3", "Person4", "Person6"],
["Person1", "Person2", "Person3", "Person5", "Person6"],
["Person1", "Person2", "Person3", "Person6", "Person5"],
["Person1", "Person2", "Person4", "Person5", "Person6"],
["Person1", "Person2", "Person4", "Person6", "Person5"],
["Person1", "Person2", "Person5", "Person3", "Person6"],
["Person1", "Person2", "Person5", "Person4", "Person6"],
["Person1", "Person2", "Person5", "Person6", "Person4"],
["Person1", "Person2", "Person4", "Person3", "Person6"]
]
let mediciPom = ['Person1', 'Person2'];
let combinazioniTemp = combinazioniMat.map((e, i) => e.concat(mediciPom[i % mediciPom.length]));
console.log(combinazioniTemp);
To answer updated question:
If you want to prevent duplicates entirely in the arrays, you can make use of the Set constructor:
let combinazioniTemp = combinazioniMat.map((e, i) => Array.from(new Set(e.concat(mediciPom[i % mediciPom.length]))));
If you want to allow existing duplicates in the arrays but only add the new element if it doesn't already exist then just check the condition like so:
let combinazioniTemp = combinazioniMat.map((e, i) => {
const n = mediciPom[i % mediciPom.length];
return (e.includes(n) ? e:e.concat(n));
});
CodePudding user response:
Find the remainder of the array index, and use that to grab the element from the mediciPom array.
const combinazioniMat=[["Person1","Person2","Person3","Person4","Person6"],["Person1","Person2","Person3","Person5","Person6"],["Person1","Person2","Person3","Person6","Person5"],["Person1","Person2","Person4","Person5","Person6"],["Person1","Person2","Person4","Person6","Person5"],["Person1","Person2","Person5","Person3","Person6"],["Person1","Person2","Person5","Person4","Person6"],["Person1","Person2","Person5","Person6","Person4"],["Person1","Person2","Person4","Person3","Person6"]];
const mediciPom = ['Person1', 'Person2'];
for (let i = 0; i < combinazioniMat.length; i ) {
const mp = mediciPom[i % 2];
combinazioniMat[i].push(mp);
}
console.log(combinazioniMat);
CodePudding user response:
use this:
let combinazioniMat = [
["Person1", "Person2", "Person3", "Person4", "Person6"],
["Person1", "Person2", "Person3", "Person5", "Person6"],
["Person1", "Person2", "Person3", "Person6", "Person5"],
["Person1", "Person2", "Person4", "Person5", "Person6"],
["Person1", "Person2", "Person4", "Person6", "Person5"],
["Person1", "Person2", "Person5", "Person3", "Person6"],
["Person1", "Person2", "Person5", "Person4", "Person6"],
["Person1", "Person2", "Person5", "Person6", "Person4"],
["Person1", "Person2", "Person4", "Person3", "Person6"],
];
let mediciPom = ["Person1", "Person2"];
let combinazioniTemp = combinazioniMat.map((el, index) => [
...el,
mediciPom[index % 2],
]);
console.log(combinazioniTemp);
