Javascript Concatenation between Arrays

2

Hello, how do I split an array and put 3 in 3 inside 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 3 of the other he does 1 in that.

I am 2 days breaking my head with this, could you help me please?

    
asked by anonymous 15.09.2017 / 14:45

4 answers

1

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

It will be shorter at the 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 on a line only with:

aux_zip.map((v,i) => (i % 3 == 0 && i != 0) ? ("_" + v) : v).join('').split('_');
    
15.09.2017 / 15:20
0

You can use a loop to insert sub arrays of the right length. An example would look 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);
    
15.09.2017 / 14:50
0

You must traverse the vector by storing the values of 3 by 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>
    
15.09.2017 / 14:54
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);
    
15.09.2017 / 17:05