J'ai besoin de convertir un tableau en objet en fonction des valeurs d'un autre tableau à l'aide de lodash ou de soulignement js.

var connections = [ 'facebook', 'twitter', 'linkedin', 'xing', 'weibo' ];

var contents = [
    {
        preview_image_url: "http://www.ideacellular.com/ISC/images/banners/home-page/banner1.jpg",
        preview_title: "title of the message1",
        facebook: "fb first 22 once more",
        preview_description: "Home↵How to↵How to find a Place in KeralaHow to find a place in Kerala"
    },
    {
        linkedin: "test linkedin",
        preview_image_url: "http://www.ideacellular.com/ISC/images/banners/home-page/banner2.jpg",
        preview_title: "linkedin title2",
        preview_description: "linkedin description 2"
    },
    {
        preview_image_url: "http://www.ideacellular.com/ISC/images/banners/home-page/banner3.jpg",
        preview_title: "linkedin title3",
        preview_description: "linkedin description 3",
        twitter: "test twitter"
    }
];

Mon exigence est de parcourir le tableau de connexions et si l'une des connexions présentes dans le tableau de contenu crée un objet de résultat avec ce nom de connexion.

Résultat attendu

var result = {
    facebook: {
        preview_image_url: "http://www.ideacellular.com/ISC/images/banners/home-page/banner1.jpg",
        preview_title: "title of the message1",
        facebook: "fb first 22 once more",
        preview_description: "Home↵How to↵How to find a Place in KeralaHow to find a place in Kerala"
    },
    linkedin: {
        linkedin: "test linkedin",
        preview_image_url: "http://www.ideacellular.com/ISC/images/banners/home-page/banner2.jpg",
        preview_title: "linkedin title2",
        preview_description: "linkedin description 2"
    },
    twitter: {
        preview_image_url: "http://www.ideacellular.com/ISC/images/banners/home-page/banner3.jpg",
        preview_title: "linkedin title3",
        preview_description: "linkedin description 3",
        twitter: "test twitter"
    }
};

Votre aide est très appréciée. J'ai essayé une boucle habituelle en utilisant forEach, y a-t-il un moyen simple de le faire en utilisant le soulignement js ou lodash. Je vous remercie.

2
Dibish 16 juil. 2015 à 08:26

2 réponses

Meilleure réponse

Essaye ça,

var result = {};

connections.forEach(function (key) {
    contents.forEach(function (el) {
        if (el[key] && !result[key]) {
            result[key] = el;
        }
    });
});

console.log(result);

Example

1
Alexander T. 16 juil. 2015 à 05:39

Vous pouvez utiliser indexBy () et intersection () pour cela:

_.indexBy(contents, function(item) {
    return _(item)
        .keys()
        .intersection(connections)
        .first();
});

L'idée est que vous trouviez l'intersection entre les clés de l'élément contents et le tableau connections. Si une telle intersection existe, vous utilisez cette valeur comme clé d'indexation.

1
Adam Boduch 16 juil. 2015 à 11:27