3 votes

Perte de données du tableau

Je découpe 3 éléments d'un tableau et je les stocke dans un autre tableau.

array = [1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1];
rows = 3;

Voici ma méthode

getVertWallStruct = (array, rows) => {
    let i = 1,
        storageArr = [],
        data = [];

    for (let k = 0; k < rows*2; k++) { // everything's ok here
      storageArr.push(array.slice(k*rows, (k+1)*rows));
    }

    data = storageArr;

    console.log("storageArr - ", storageArr, " , array - ", array, " , data - ", data);

    return data;
  }

Dans ce cas, storageArr sera composé de tableaux vides (en ce qui concerne les données). Mais lorsque je supprime la ligne avec données = storageArr ; J'ai compris :

storageArr =  [ //storageArr should look like this in the end
  [1, 1, 1],
  [0, 1, 1],
  [1, 1, 1],
  [1, 1, 1],
  [0, 1, 1],
  [1, 1, 1]
]

Pourquoi est-ce que je perds des valeurs ?

Mise à jour : Même lorsque j'ai copié-collé le code d'une des réponses - la méthode retourne vacío données. Pourquoi ?

Le code ressemble :

getVertWallStruct = (array, rows) => {
    console.log(array, rows); //okay here

    let iterator = array.values()
    let out = []
    for (let i = 0;i < ~~(array.length / rows); i++){
      out.push([iterator.next().value, iterator.next().value, iterator.next().value])
    }
    console.log(out); //empty ???

    return out;
  }

enter image description here

2voto

Cryptopat Points 119

Une façon possible de le faire, en utilisant un itérateur de tableau :

La méthode values() renvoie un nouvel objet Iterator de type tableau qui contient les valeurs pour chaque index du tableau. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_objects/Object/values

const array = [1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1]
let iterator = array.values()
let out = []
for (let i = 0;i < ~~(array.length / 3);i++){
  out.push([iterator.next().value, iterator.next().value, iterator.next().value])
}
console.log(out)

Mise à jour, cela semble fonctionner correctement :

Mise à jour : Même lorsque j'ai copié-collé le code d'une des réponses - la méthode renvoie des données vides. Pourquoi ?

getVertWallStruct = (array, rows) => {
    let iterator = array.values()
    let out = []
    for (let i = 0;i < ~~(array.length / rows); i++){
      out.push([iterator.next().value, iterator.next().value, iterator.next().value])
    }
    return out;
  };

console.log(
  getVertWallStruct([1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1], 3)
)

0voto

Adrian Brand Points 2081

Utiliser une réduction, pousser un tableau vide dans l'accumulateur chaque fois que l'index est divisible par le nombre de lignes. Pousse l'élément courant dans le dernier tableau de l'accumulateur.

const array = [1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1];

const rowify = (array, rows) => array.reduce((results, current, index) => {
  if (index % rows === 0) {
    results.push([]);
  }
  results[results.length - 1].push(current);
  return results;
}, []);

console.log(rowify(array, 3));

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X