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 ![]()
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);
}
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
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 ![]()
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 ![]()
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 !
Ça n'a rien de moderne ...
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.
https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_globaux/Array/filter
peut être que oui a une époque
tu aurais faisfunction(item) { return {]}
ça reste le même code :
https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Fonctions
La bonne époque où on avait une page dynamique avec 3000 lignes de code écrit en js ...
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:)
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
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.
perso, je trouve les notations fonctionnelles beaucoup plus difficile a parser que les boucles for. eye of the beholder, tout ca..
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 ;)
[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.
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