J'ai une gamme de tableau comme ci-dessous: - Si vous voyez la clé de tableau sous-ensembles est identique dans les deux objets du tableau. L'OutTUT que j'ai besoin d'obtenir devrait être comme ci-dessous: - p> im en utilisant Lodash en JavaScript, peut-on me guider vers la solution qui est efficace. P> Mon approche consiste à obtenir le tableau des sous-ensembles unique à partir de la matrice ci-dessus à l'aide de Lodash Unky Funtion, puis obtenez tous les objets de la matrice principale ayant une clé sous-ensembles et mettez mon objet personnalisé. P> Ce n'est donc pas une solution efficace. Vous cherchez plus d'idées. P> p>
3 Réponses :
Ce code aidez à vous de fusionner toutes les données de votre tableau:
let test = [ { subsets: [ { start: '0020', end: '007F', }, { start: '0020', end: '007G', }, { start: '0020', end: '007G', }, ], fontFormat: 'woff2', src: 'estPath1/', }, { subsets: [ { start: '0020', end: '007F', }, { start: '0020', end: '007G', }, { start: '0020', end: '007G', }, ], fontFormat: 'woff', src: 'estPath2/', }, { subsets: [ { start: '0020', end: '007F', }, { start: '0021', end: '007G', }, { start: '0020', end: '007G', }, ], fontFormat: 'woff', src: 'estPath3/', } ]; var final = []; for(var i = 0; i < test.length; i++) { var object = {subsets : [] , webFontList: []}; object.subsets = test[i].subsets; object.webFontList.push({fontFormat: test[i].fontFormat, src: test[i].src}); for(var j = i +1; j < test.length; j++) { if(_.isEqual(test[i].subsets, test[j].subsets)) { object.webFontList.push({fontFormat: test[j].fontFormat, src: test[j].src}); test.splice(j, 1); } } final.push(object); } console.log("final object is : ", final);
Voici la solution:
const fontList = params.fontList.map((font) => { const uniquesubset = _.compact(_.map(_.uniqWith(font.webFontList, (item, itemTwo) => _.isEqual(item.subset, itemTwo.subset)).map(_.property('subset')))); if (uniquesubset.length > 0) { const subsets = uniquesubset.map((subset) => { const webFontList = _.compact(_.map(font.webFontList, webFont => (_.isEqual(webFont.subset, subset) ? _.pick(webFont, ['fontFormat', 'src', ]) : undefined))); const updatedWebFontList = _.compact(webFontList); return { subset, webFontList: updatedWebFontList, }; }); return { subsets, sourceFont: font.sourceFont, }; } return { sourceFont: font.sourceFont, subsets: { webFontList: font.webFontList, }, }; });
Quelqu'un peut-il optimiser cette solution dans le sens où je dois écrire moins de code à l'aide de Lodash ou si la performance peut être optimisée que ce serait génial !!