-1
votes

Array of Array Convertir en un seul tableau d'objets en JavaScript

J'ai une gamme de tableau comme ci-dessous: - xxx

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: - xxx

im en utilisant Lodash en JavaScript, peut-on me guider vers la solution qui est efficace.

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é.

Ce n'est donc pas une solution efficace. Vous cherchez plus d'idées.


0 commentaires

3 Réponses :



0
votes

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);


0 commentaires

0
votes

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,
            },
        };
    });


1 commentaires

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 !!