【问题标题】:Convert array to object based on set of keys using lodash or underscore js使用 lodash 或下划线 js 基于键集将数组转换为对象
【发布时间】:2015-10-05 09:49:55
【问题描述】:

我需要使用 lodash 或下划线 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"
    }
];

我的要求是遍历连接数组,如果内容数组中存在任何连接,则使用这些连接名称创建结果对象。

预期结果

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"
    }
};

非常感谢您的帮助。我尝试了一些使用 forEach 的常用循环,有没有使用下划线 js 或 lodash 的简单方法。谢谢你。

【问题讨论】:

    标签: javascript arrays underscore.js lodash


    【解决方案1】:

    您可以为此使用indexBy()intersection()

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

    这个想法是您找到contents 项的键和connections 数组的键之间的交集。如果存在这样的交集,则使用该值作为索引键。

    【讨论】:

      【解决方案2】:

      试试这个,

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

      Example

      【讨论】:

      • 非常感谢您的帮助。上帝保佑你。
      猜你喜欢
      • 1970-01-01
      • 2023-03-28
      • 2015-05-13
      • 2021-01-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多