0
votes

Javascript .Push causant un tableau à nid plus profond et plus profond

Je suis sûr que c'est facile, mais mes recherches n'ont pas encore aidé à ne pas encore.

Lorsque je pousse un tableau dans un autre tableau, ils nichent un niveau plus profond. Le premier tableau est à la bonne profondeur. xxx

résultat: xxx


9 commentaires

C'est ce qui est supposé se produire, pourquoi es-tu attendu autrement?


Plutôt que poussez dans l'autre dans l'autre, vous devez concaténer (en utilisant Concat ou ... , par exemple).


@jonrsharpe à partir du 2e tableau vers l'avant, le tableau est de 1 niveau plus profond.


existantearray.push (... Producteur) ou pour Internet Exploder, existantarray.push.apply (existantarray, productarray)


@TyLerroper, je vais essayer ..., Concat ne fonctionne pas. Il ne jette aucune erreur, mais le nouveau tableau ne se fusionne pas.


@M_Becker concat ne modifie pas l'une des tableaux; Il renvoie un tableau nouveau . Vous voudrez probablement stocker cela comme une nouvelle variable, c'est-à-dire var newarray = array1.concat (array2) , où newarray est le résultat fusionné de array1 < / code> et array2 .


@TyLerroper ... a travaillé. J'ai appris quelque chose de nouveau aujourd'hui, merci! Souhaitez-vous le soumettre comme une réponse afin que je puisse le marquer comme résolu?


@M_Becker Je l'apprécie - heureux d'avoir pu aider. Je crois que cette question tombe probablement sous une poignée de doublons potentiels. Vous pouvez peut-être accepter l'une des dupes suggérées et les futurs lecteurs de futurs points à la place :)


@TyLerropero fera, merci encore!


3 Réponses :


0
votes

Vous avez plusieurs options pour concaténer deux tableaux, mais .push code> n'est pas (sauf si vous iTontrez le 2e tableau et poussez chaque élément individuellement, ou suivez avec .flat () Code>)

p>

let array = [1, 2, 3];

array.push([4, 5, 6]);
console.log(array); // [1, 2, 3, [4, 5, 6]]

array = array.concat([7, 8, 9]);
console.log(array); // [1, 2, 3, [4, 5, 6], 7, 8, 9]

array = [...array, ...[10, 11, 12]];
console.log(array); // [1, 2, 3, [4, 5, 6], 7, 8, 9, 10, 11, 12]

array.push(13, 14, 15);
array = array.flat();
console.log(array); // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]


1 commentaires

Hey Junvar. À l'avenir, envisagez de marquer des doublons plutôt que de les répondre. Soumettre des réponses aux questions qui ont déjà été posées a déjà tendance à encombrer le site avec des informations répétées et encourage les utilisateurs à poser des questions répétées :)



0
votes

parce que productarraray em> est un tableau et non un objet, le poussant dans un autre tableau créera un autre tableau em>, qui contiendra à la fois le tableau initial et le nouveau Un.

Pour faire ce que vous attendiez, vous devez déclarer un nouvel objet et pousser il em> dans le tableau existant. P>

var productObject = {productID: 1, productPrice: 1, productName: '', options:{}};
var productArray = [];
if(localStorage.getItem("cart")){
    var existingArray = JSON.parse(localStorage.getItem("cart"));
    existingArray.push(productObject );
    localStorage.setItem("cart", JSON.stringify(existingArray));
} else {
    productArray.push(productObject);
    localStorage.setItem("cart", JSON.stringify(productArray));
}


0 commentaires

0
votes

Je pense que vous ajoutez tout le "producteur" dans la position N de votre "existantarray". Essayez de faire cela.

var productArray = [{productID: currentProduct, productPrice: currentPrice, productName: productName, options: myOptions}];

if(localStorage.getItem("cart")){
    var existingArray = JSON.parse(localStorage.getItem("cart"));
    productArray.forEach(function(val){
     existingArray.push(val);
    })
    localStorage.setItem("cart", JSON.stringify(existingArray));
} else {
    localStorage.setItem("cart", JSON.stringify(productArray));
}


0 commentaires