CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[TypeScript] Tableaux d'objets

LeuNoeleeste
LeuNoeleeste
Niveau 10
11 novembre 2020 à 16:20:14

Bonjour à tous,

Je suis certain que la question suivante est toute bête, mais la doc est une spirale d'exemples qui ne correspondent pas trop à ce que je cherche, j'apprécierai bien un petit coup de pouce.

test_A = [{
    maPropOne: 'Property 1',
    maPropTwo: 'Property 2',
    maPropThree: 'Property 3',
    maPropFour: 'Property 4',
    maPropFive: 'Property 5',
  }];

Je voudrais créer une fonction qui, à partir de ce test_A, me revoie un nouveau tableau d'objet test_B qui ne contient que quelques propriétés précises de test_A comme par exemple la 1, la 3, et la 5 :

test_B = [{
    maPropOne: 'Property 1',
    maPropThree: 'Property 3',
    maPropFive: 'Property 5',
  }];

Si vous pouviez me pousser vers un exemple pertinent et/ou me montrer comment procéder, je vous en serai reconnaissant. J'arrive à accéder aux propriétés de mon objet avec un foreach, mais impossible de remplir mon test_B sans erreur :(

Message édité le 11 novembre 2020 à 16:21:43 par LeuNoeleeste
boucif
boucif
Niveau 24
11 novembre 2020 à 16:48:56

sans utiliser de bibliothèque tierce (code à adapter j'ai pas testé) :
let test_B =[]; for(var i=0;i<test_A.length;i++){ let item=test_A[i]; let data={ maPropOne: item.maPropOne, maPropThree: item.maPropThree, maPropFive: item.maPropFive, }; test_B .push(data); }

VinkingBanni
VinkingBanni
Niveau 10
11 novembre 2020 à 17:56:31

Le 11 novembre 2020 à 16:48:56 boucif a écrit :
sans utiliser de bibliothèque tierce (code à adapter j'ai pas testé) :
let test_B =[]; for(var i=0;i<test_A.length;i++){ let item=test_A[i]; let data={ maPropOne: item.maPropOne, maPropThree: item.maPropThree, maPropFive: item.maPropFive, }; test_B .push(data); }

olà mon pauvre :

const testB = testA.map((item) => ({propsA: [item.prop1, propsB: item.props2 });

ou array.filter

boucif
boucif
Niveau 24
11 novembre 2020 à 18:38:33

Le 11 novembre 2020 à 17:56:31 VinkingBanni a écrit :

Le 11 novembre 2020 à 16:48:56 boucif a écrit :
sans utiliser de bibliothèque tierce (code à adapter j'ai pas testé) :
let test_B =[]; for(var i=0;i<test_A.length;i++){ let item=test_A[i]; let data={ maPropOne: item.maPropOne, maPropThree: item.maPropThree, maPropFive: item.maPropFive, }; test_B .push(data); }

olà mon pauvre :

const testB = testA.map((item) => ({propsA: [item.prop1, propsB: item.props2 });

ou array.filter

La joie des fonctions moderne :)

Kluent75
Kluent75
Niveau 9
11 novembre 2020 à 18:52:44

Le 11 novembre 2020 à 18:38:33 boucif a écrit :

Le 11 novembre 2020 à 17:56:31 VinkingBanni a écrit :

Le 11 novembre 2020 à 16:48:56 boucif a écrit :
sans utiliser de bibliothèque tierce (code à adapter j'ai pas testé) :
let test_B =[]; for(var i=0;i<test_A.length;i++){ let item=test_A[i]; let data={ maPropOne: item.maPropOne, maPropThree: item.maPropThree, maPropFive: item.maPropFive, }; test_B .push(data); }

olà mon pauvre :

const testB = testA.map((item) => ({propsA: [item.prop1, propsB: item.props2 });

ou array.filter

La joie des fonctions moderne :)

C'est un standard le map/filter/reduce que tu retrouveras dans plein de langage.
Le pattern collection pipeline (vu que c'est de ça dont il s'agit) ça permet d'écrire du code propre :ok:

LeuNoeleeste
LeuNoeleeste
Niveau 10
13 novembre 2020 à 11:00:43

Merci bien pour vos réponses, ça fonctionne (j'ai testé les deux versions, les deux tournent sans soucis), et je suis en train de me renseigner sur la doc de ces fonctions modernes. Un bon week-end à vous !

Message édité le 13 novembre 2020 à 11:01:13 par LeuNoeleeste
VinkingBanni
VinkingBanni
Niveau 10
13 novembre 2020 à 17:47:15

Ça n'a rien de moderne ...

boucif
boucif
Niveau 24
13 novembre 2020 à 19:31:40

Je me rappel d’un temps pas si lointain ou j’avais pas accès à ce genre de chose, merci IE8 🤣
Résultat des fois je les utilise pas en pensant que c’est pas compatible avec le navigateur que je cible 😂
Bon maintenant j’utilise rxjs si je fais de l’angular donc ça va.

VinkingBanni
VinkingBanni
Niveau 10
13 novembre 2020 à 22:01:33

https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_globaux/Array/filter

peut être que oui a une époque
tu aurais fais
function(item) { return {]}

ça reste le même code :
https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Fonctions

boucif
boucif
Niveau 24
14 novembre 2020 à 01:25:31

La bonne époque où on avait une page dynamique avec 3000 lignes de code écrit en js ...

fanthomas37
fanthomas37
Niveau 4
18 novembre 2020 à 22:52:40

olà mon pauvre :

const testB = testA.map((item) => ({propsA: [item.prop1, propsB: item.props2 });

ou array.filter

C'est tellement illisible que ce code d'une ligne est faux...

Pour info, c'est moisi Array.map ou Array.filter
Plus précisément, c'est lent, plus lent que la première réponse en tout cas:)

boucif
boucif
Niveau 24
19 novembre 2020 à 21:56:35

Le for avec le parcours d'un tableau par index est souvent le plus performant mais c'est pas forcément le plus concis des codes

xidi87
xidi87
Niveau 8
19 novembre 2020 à 22:37:57

Le 18 novembre 2020 à 22:52:40 fanthomas37 a écrit :

olà mon pauvre :

const testB = testA.map((item) => ({propsA: [item.prop1, propsB: item.props2 });

ou array.filter

C'est tellement illisible que ce code d'une ligne est faux...

Pour info, c'est moisi Array.map ou Array.filter
Plus précisément, c'est lent, plus lent que la première réponse en tout cas:)

oui la prog fonctionnelle est souvent plus lente, mais c'est plus élégant, concis et donc moins soumis aux fautes (surtout vu que ça incite à utiliser des fonctions pures).

Vas-tu sur ton programme voir la différence entre un Array.map/filter et un for ? A 99.99% du temps tu ne la verras pas.
En revanche ceux qui maintiennent du code dégueulasse, ça ça coûte cher parce que le frottement cognitif et le coût du legacy code n'est pas négligeable.

Comme on dit : Premature optimization is the root of all evil.

Message édité le 19 novembre 2020 à 22:38:15 par xidi87
godrik
godrik
Niveau 30
19 novembre 2020 à 23:03:37

perso, je trouve les notations fonctionnelles beaucoup plus difficile a parser que les boucles for. eye of the beholder, tout ca..

VinkingBanni
VinkingBanni
Niveau 10
20 novembre 2020 à 08:23:20

Dire que ça marche pas ça c'est faux.

Pour l'option sérieusement ça va changer grand chose. Sinon tu le fais en amon.

J'ai fais le code sur une ligne mais on peut l'écrire sur plusieurs sa le rends plus lisible.
L'argument falafel c'est pas lisible.

Apres libre a vous de réinventer la roue ;)

lokilok
lokilok
Niveau 16
20 novembre 2020 à 11:07:19

[08:23:20] <VinkingBanni>
Dire que ça marche pas ça c'est faux.

Si, t'as un crochet ouvrant qui sort de nul part, mais c'est juste une faute de frappe.

Message édité le 20 novembre 2020 à 11:07:36 par lokilok
VinkingBanni
VinkingBanni
Niveau 10
20 novembre 2020 à 15:31:00

Le 20 novembre 2020 à 11:07:19 lokilok a écrit :

[08:23:20] <VinkingBanni>
Dire que ça marche pas ça c'est faux.

Si, t'as un crochet ouvrant qui sort de nul part, mais c'est juste une faute de frappe.

C'est pour voir qui suit et qui fait des c/c

Sous forums
  • Aide à l'achat Mac
  • Steam Deck
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Internet
  • Macintosh
  • Hardware
La vidéo du moment