J'ai un tableau d'objets JSON dans le backend express comme celui-ci, dont chaque objet contient un tableau, la clé est la même appelée projectTags
:
[ { projectTags: [ 'rer', 'a10', 'c12', 'e14', 'b11', 'd13' ] },]
Et Je veux fusionner ces tableaux ensemble, dont le résultat n'aura pas non plus la même balise. Donc, idéalement, cela ressemblera à ceci:
[ { projectTags: [ 'rer' ] }, { projectTags: [ 'a10' ] }, { projectTags: [ 'a10', 'c12', 'e14' ] }, { projectTags: [ 'a10', 'e14', 'b11', 'c12', 'd13' ] } ]
Comment dois-je faire pour y parvenir?
6 Réponses :
Vous pouvez réduire
vos cartes en un seul élément concat
qui n’a pas encore été ajouté.
const arr = [{projectTags:["rer"]},{projectTags:["a10"]},{projectTags:["a10","c12","e14"]},{projectTags:["a10","e14","b11","c12","d13"]}]; const resp = [{ projectTags: arr.reduce((a, e) => { const notIncludedYet = e.projectTags.filter(x => !a.includes(x)); return a.concat(notIncludedYet) }, []) }] console.log(resp)
Avec concat
vous pouvez créer un tableau, et avec Set vous pouvez obtenir des valeurs uniques:
const data = [ { projectTags: [ 'rer' ] },{ projectTags: [ 'a10' ] }, { projectTags: [ 'a10', 'c12', 'e14' ] }, { projectTags: [ 'a10', 'e14', 'b11', 'c12', 'd13' ] } ]; const result = [{ projectTags: [...new Set([].concat(...data.map(o => o.projectTags)))]}]; console.log(result);
Vous pouvez prendre un Set
et ajouter toutes les balises.
var data = [{ projectTags: ['rer'] }, { projectTags: ['a10'] }, { projectTags: ['a10', 'c12', 'e14'] }, { projectTags: ['a10', 'e14', 'b11', 'c12', 'd13'] }], result = [{ projectTags: Array.from( data.reduce( (s, { projectTags }) => ( projectTags.forEach(Set.prototype.add, s), s ), new Set ) ) }]; console.log(result) ;
Si vous n'avez pas besoin de doublons:
var arr = [ { projectTags: ['rer'] }, { projectTags: ['a10'] }, { projectTags: ['a10', 'c12', 'e14'] }, { projectTags: ['a10', 'e14', 'b11', 'c12', 'd13'] }]; var arr2 = []; arr.forEach(function (e) { var i = e.projectTags; for (var x = 0; x < i.length; x++) { if (arr2.indexOf(i[x]) == -1) arr2.push(i[x]); } }); console.log(arr2);
Voici le code que j'ai écrit en JavaScript. J'espère que cela vous aidera.
// La liste des données fournies dans la question.
var dataList = [ { projectTags: [ 'rer' ] }, { projectTags: [ 'a10' ] }, { projectTags: [ 'a10', 'c12', 'e14' ] }, { projectTags: [ 'a10', 'e14', 'b11', 'c12', 'd13' ] } ]; //Final Result var dataListAfterMerge = []; //the list of unique items to be added. var items = []; //to verify if the item is already present in the new list (i.e. items). var isAdded = false; //Call this function on button click or any place you needed. merge = function() { for (var data of dataList){ for(var item of data.projectTags) { for(var newItem of items) { if(item == newItem) { isAdded = true; break; } } if(!isAdded) { items.push(item); } isAdded = false; } } dataListAfterMerge.push({projectTags: items}); console.log(dataListAfterMerge); }
Vous pouvez utiliser réduire pour créer un tableau avec tous les éléments ensemble, puis avec Set supprimer tous les doublons:
const arr = [ { projectTags: ['rer'] }, { projectTags: ['a10'] }, { projectTags: ['a10', 'c12', 'e14'] }, { projectTags: ['a10', 'e14', 'b11', 'c12', 'd13'] }]; const withoutDuplicates = [... new Set(arr.reduce((newArray, element) => { newArray.push(...element.projectTags); return newArray; }, []))];