3
votes

Des données étranges perdent en javascript lors de la conversion d'un tableau en objet

Je travaillais juste avec des objets JavaScript et j'ai trouvé ce que je n'arrive pas à comprendre. J'ai créé un tableau avec peu de valeurs et j'ai essayé de convertir ce tableau en objet en utilisant spread et new en JavaScript, mais pour ma surprise, seule la première valeur du tableau a été placée dans l'objet avec son type.

Je n'ai pas besoin de quoi exactement se passe en arrière-plan

Number {1970}

Sortie:

let array = [1970,1,1]
let object = new Object(array)

console.log(object)

J'attendais un objet {1970, 1, 1} mais la sortie réelle est Numéro {1970}


2 commentaires

Je ne peux pas reproduire cela dans Chrome 75.0.


" essayant de convertir ce tableau en objet " - quoi? Un objet tableau est déjà un objet. Alors, que voulez-vous réellement accomplir?


4 Réponses :


2
votes

La chose la plus proche que vous puissiez faire est:

{0: 1970, 1:1, 2:1}

Ce qui vous donnera le résultat:

const object = {...array}


3 commentaires

Oui. Pouvez-vous me dire ce qui ne va pas avec mon approche


En général, vous devez éviter d'utiliser le constructeur littéral new Object . Si vous lui passez un tableau, vous retournerez simplement le tableau.


lorsque vous utilisez l'opérateur de propagation const obj = {... array} vous dites: Hey, faites-moi un objet avec une propriété pour chaque élément de ce tableau, et ce nom de propriété sera l'index de l'élément



1
votes

Vous pouvez essayer avec Object.assign ()

let array = [1970,1,1];
let object = Object.assign({}, array);
console.log(object);


0 commentaires

3
votes

pour convertir un tableau en objet, utilisez Object.assign

let array = [1970,1,1];
var obj = new Object();
Array.prototype.push.apply(obj, array);
console.log(obj); 

ou vous pouvez remplir l'objet avec les éléments du tableau

Object.assign({},[1970,1,1])


2 commentaires

Pouvez-vous me dire ce qui se passe avec mon approche pourquoi toutes les autres valeurs s'attendent à ce que la première soit rejetée


vous ne pouvez pas utiliser array comme constructeur pour Object, pour corriger votre approche, vous devez utiliser let obj = new Object (); Array.prototype.push.apply (obj, tableau);



0
votes

Cela fonctionne dans Chrome (version 75).

Vérifiez le code suivant, si vous vous attendez au comportement suivant.

CODE:

let array = [1970,1,1];
let obj = {}, i = 0;
for(var element in array) obj[i++] = array[element];
console.log(obj);


0 commentaires