Javascript Concatenation between Arrays

Asked

Viewed 127 times

2

Hello, how do I divide an array and place 3 in 3 within another?

I have an array:

aux_zip ["Cafe","feijao","frango","batata","pao","miojo","laranja","mouse","teclado];

I want to concatenate this way:

zip ["Cafefeijaofrango","batatapaomiojo,"laranjamouseteclado];

So that he takes every third of the other he makes 1 in this.

I’m two days away from cracking my head on this, could you please help me?

4 answers

1

To complement the existing answers to the original problem with a different solution, I put here one using map, join and split.

It will be shorter at code level but probably less efficient:

const aux_zip =  ["Cafe","feijao","frango","batata","pao","miojo","laranja","mouse","teclado"];

//colocar um separador _ antes de cada elemento múltiplo de 3
const mapeado = aux_zip.map((v,i) => (i % 3 == 0 && i != 0) ? ("_" + v) : v);

//juntar tudo e dividir pelo separador colocado anteriormente
let resultado = mapeado.join('').split('_');

console.log(resultado);

Or in a line with:

aux_zip.map((v,i) => (i % 3 == 0 && i != 0) ? ("_" + v) : v).join('').split('_');
  • 1 by golf code!

0

You can use a loop to insert subarrays with the right length. An example would be like this:

const max = 3;
const array = ["Cafe", "feijao", "frango", "batata", "pao", "miojo", "laranja", "mouse", "teclado"];

let temp = null;
let arr = [];
let novaArray = [arr];
while (temp = array.shift()) {
  arr.push(temp);
  if (arr.length == max && array.length > 0) {
    arr = [];
    novaArray.push(arr);
  }
}

console.log(novaArray);

0

You must traverse the vector by storing the values of 3 in 3 and assigning them to a new vector.

var comida = ["Cafe","feijao","frango","batata","pao","miojo","laranja","mouse","teclado", "ovo"];

//Variavel onde armazenarei os valores de 3 em 3.
var mistura = ""; 

//Vetor onde adiconarei os valores armazenados.
var arrayMistura = [];

//Armazeno o resto da divisão do vetor comida por 3.
var modComida = comida.length % 3;

for(i=0;i<comida.length;i++){      //Percorro o primeiro vetor.
  mistura = mistura + comida[i];   //concateno o valor dos itens
  if( (i+1) % 3 == 0){ //Se o resto da divisão por 3 for zero
   arrayMistura.push(mistura); //Adiciono os valores ao vetor
   mistura = ""; //limpo a variavel com os itens
  } 
}

//Se o resto da divisão for igual a 1 ou 2 significa que ainda a valores para armazenarmos no arrayMistura.
if( modComida == 2){
    mistura = comida[comida.length-2] + comida[comida.length-1];
}else if(modComida == 1){
  mistura = comida[comida.length-1];
}
arrayMistura.push(mistura);

console.log(arrayMistura); //Exibo resultado no console.
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

  • Perfect! Only q if I add another value it does not put in the Istura array, I would have to add 3 for it to recognize, as I would for it to save 1 as well?

  • I don’t understand your doubt, can you explain to me again?

  • If you add the "egg" element in the var food array = ["Cafe","feijao","chicken","potato","pao","miojo","orange","mouse","keyboard","egg"]; it does not appear in the arrayMistura.

  • I updated the answer

0

You could do so too:

const arr = ["Cafe", "feijao", "frango", "batata", "pao", "miojo", "laranja", "mouse", "teclado", "ovo"];
const max = 3;
let mistura = [];
let temp = '';

const chegouNoLimite = (index) => {
    return ((index % max) == 0);
}

const naoVaiCompletarOMax = (index) => {
    return ((index + max) > (arr.length+1)) && !temp
}

arr.forEach((comida, idx) => {
    idx++; //usar index iniciando em 1

    if (chegouNoLimite(idx)) { // contou 3
        mistura.push(temp += comida);
        temp = ''
    } else if ( naoVaiCompletarOMax(idx) ) { //não vai chegar a 3
            mistura.push(comida);
    } else { //vai chegar em 3 mas ainda não é 3
            temp += comida;
    }
});

console.log(mistura);

Browser other questions tagged

You are not signed in. Login or sign up in order to post.