0
votes

Type d'indéfinie en essayant d'accéder à la propriété de l'objet imbriqué dans la matrice

J'ai un tableau qui contient un mélange d'objets et de tableaux contenant des objets avec les mêmes propriétés xxx

essayant de prendre chaque objet individuel, recherchez la valeur de "sortie" et poussez que beaucoup plus d'objets dans un nouveau tableau: xxx

et d'erreur "ne peut pas lire la propriété" sortie "de non définie" pour ce PlantoBJ [i] Référence ... sans suggérer d'autres méthodes et solutions et tels s'il vous plaît et merci (je sais qu'ils sont là-bas, cet exercice d'école!), Est-ce que je manque quelque chose dans la syntaxe ou la logique pour accéder à la valeur de la propriété "sortie" de ces objets imbriqués ? La façon dont je lis cela, en commençant à la déclaration IF, est "Si Planitem est une matrice, définissez une variable I à 0 et que je suis inférieur à la valeur de la propriété" Sortie "de l'entrée trouvée à Index Position I de Plantatem ... etc ".

reste de celui-ci s'exécute bien.

Merci!

** Éditer PlantoBJ était une faute de frappe, fixe * *


1 commentaires

Vous n'avez nulle part plantobj nulle part, laissez-moi savoir ce que vous essayez d'atteindre, je peux vous aider avec le code


4 Réponses :


1
votes

Dans le premier pour vous avez besoin d'un pour boucle à travers votre matrice, une autre pour boucle à travers la sortie. Dans votre seconde pour vous, Push Plantabj Wich n'existe pas.

p>

plantsArray = [
  {type: "wheat", height: 20, output: 25},
  {type: "soybeans", height: 30, output: 29},
  [{type: "corn", height: 34, output: 9}, {type: "wheat", height: 20, output: 25}],
  {type: "wheat", height: 20, output: 25}
]

const harvestOutput = [];

for (const plantItem of plantsArray) {
    if (Array.isArray(plantItem) ) {
        for (let i = 0; i < plantItem.length; i++)
          for (let j = 0; j <= plantItem[i].output; j++) {
            harvestOutput.push({...plantItem[i]}); // the {...} is to destructuring the object and make a copy
          }
    } 
    else
      for (let j = 0; j <= plantItem.output; j++) {
        harvestOutput.push({...plantItem});
      }
}

console.log(harvestOutput);


1 commentaires

Il veut y introduire 25 fois si la sortie est 25.



1
votes

Vous pouvez la matrice plate, puis mapper

p>

let plantsArray = [
{type: "wheat", height: 20, output: 25},
{type: "soybeans", height: 30, output: 29},
[{type: "corn", height: 34, output: 9}, {type: "wheat", height: 20, output: 25}],
{type: "wheat", height: 20, output: 25}];


let result = plantsArray.flat(1).map(x => x.output);
console.log(result);


2 commentaires

Il a dit qu'il ne veut pas un moyen de le faire, mais pourquoi sa façon ne fonctionne pas.


plat () est une bonne ressource pour accéder à une matrice imbriquée et je pense être utile d'être conscient de cela



0
votes

Cet extrait de résoudre votre problème;)

p>

const plantsArray = [
    { type: 'wheat', height: 20, output: 25 },
    { type: 'soybeans', height: 30, output: 29 },
    [{ type: 'corn', height: 34, output: 9 }, { type: 'wheat', height: 20, output: 25 }],
    { type: 'wheat', height: 20, output: 25 }
];

let harvestOutput = [];
plantsArray.flat(1).forEach(plantItem => {
    const harvestedItems = new Array(plantItem.output).fill(plantItem);
    harvestOutput = harvestOutput.concat(harvestedItems);
});

console.log(harvestOutput);


0 commentaires

1
votes

Vous avez manqué une boucle de matrice imbriquée. Et au lieu de plantitem, vous avez utilisé comme PlantoMJ. J'ai ajouté comme commentaire dans l'endroit respectif.

p>

 for (let k = 0; k < plantItem[i].output; k++) {
     harvestOutput.push(plantItem[i])
 }


0 commentaires