J'essayais un simple morceau de code dans lequel un tableau d'objets est présent et chaque objet a un autre tableau de produits (avec des valeurs en double). Je voulais combiner toutes les gammes de produits ensemble sans aucun doublon. Déjà atteint la moitié du processus d'itération mais impossible de supprimer les doublons, y a-t-il un moyen d'itérer les valeurs (car il a lui-même une valeur de clé comme objet 1 et ses données ..)
Veuillez suggérer toute autre méthode optimisée si possible. Je suis nouveau dans JavaScript alors pardonnez toutes les erreurs stupides faites Merci d'avance.
3 Réponses :
Vous pouvez le faire en utilisant concat
, Set
et Array.from
:
const object1 = { products: ['1', '2', '3'] } const object2 = { products: ['1', '2', '3', '4'] } const object3 = { products: ['5'] } // Merge all the products in one Array const products = object1.products .concat(object2.products) .concat(object3.products); // Create a Set, with the unique products const set = new Set(products); // Convert the Set to an Array const uniqueProducts = Array.from(set); console.log(uniqueProducts)
arr.forEach ((value, index, arr) => {array.push (value.object1.products, value.object2.products, val ue.object3.products)}) console.log ("arr after concat" + array) var set = new Set (tableau); console.log (set) const unique = Array.from (set); console.log ("tableau le plus récent:" + unique) a essayé d'ajouter ce morceau de sortie de code est encore le même.
SORTIE: arr après concat str1, str2, str3, str2, str5, str5, str4, str5, str6, str7, str7, str8, str9 Set {['str1', 'str2', 'str3', 'str2' , 'str5', 'str5'], ['str4', 'str5', 'str6', 'str7'], ['str7', 'str8', 'str9']} tableau le plus récent: str1, str2, str3 , str2, str5, str5, str4, str5, str6, str7, str7, str8, str9
Vous n'avez pas besoin d'utiliser forEach
et vous devez envoyer un tableau plat au Set
. Essayez simplement de comprendre et de suivre strictement mon exemple ci-dessus et de l'appliquer à votre cas d'utilisation. Si vous exécutez l'extrait de code ci-dessus, vous verrez qu'il fonctionne correctement.
Cela fonctionne bien avec votre chemin.Merci .Mais si nous avons 10 objets, comment pouvons-nous l'itérer dans son niveau profond pour obtenir la gamme de produits.
Si vous avez beaucoup d'objets (au lieu de seulement 3), alors il est raisonnable de les parcourir et de créer un nouveau tableau plat résultant, puis de passer le tableau au Set
. Vous pouvez itérer avec n'importe quelle fonction JS que vous voulez, mais je préférerais utiliser reduction
ou forEach
. Si la réponse vous a aidé, vous pouvez envisager de l'accepter. Merci! :)
Pour supprimer les doublons, vous pouvez utiliser Set
, il garde tous les éléments uniques, puis vous pouvez les convertir en Array
.
Array.from(new Set(array))
p >
il existe de nombreuses façons d'y parvenir:
https: / /developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter en lisant en valeur, son index et son tableau en fonction de filtre
un lien de recherche rapide: https://codeburst.io/javascript-array-distinct-5edc93501dc4
function MergeUniqueProductFromDictToArry(fromDict, productKey, toArray) { //check if for the array in which we need to merge if(!toArray) { toArray = []; } //check for validity if(!fromDict || !productKey || !fromDict[productKey] || fromDict[productKey].length == 0) { return toArray; } for(var ix in fromDict[productKey]) { //check if product already exist if(toArray.indexOf(fromDict[productKey][ix]) === -1) { toArray.push(fromDict[productKey][ix]); } } return toArray; } var object1 = {products: ["p1", "p2", "p1"]}; var object2 = {products: ["p3", "p2"]}; var object3 = {products: ["p4", "p2"]}; var uniqueProducts = MergeUniqueProductFromDictToArry(object1, "products", null); uniqueProducts = MergeUniqueProductFromDictToArry(object2, "products", uniqueProducts); uniqueProducts = MergeUniqueProductFromDictToArry(object3, "products", uniqueProducts); console.log(uniqueProducts);