首页 > 解决方案 > Lodash:用值对象内部属性交换键

问题描述

我得到低于 JSON 响应:

users: {
    1: {
        name: "John",
        email: "john@test.com",
        id: 1,
        place: "NY"
    },
    2: {
        name: "Alex",
        email: "alex@test.com",
        id: 2,
        place: "FL"
    },
    3: {
        name: "Tony",
        email: "tony@test.com",
        id: 3,
        place: "TX"
    }
    .
    .
    .
    .
    .
    .
}

我想将 id 键与来自内部对象值的电子邮件键交换如下格式。

users: {
    "john@test.com": {
        name: "John",
        email: "john@test.com",
        id: 1,
        place: "NY"
    },
}

我正在使用下面的 lodash 代码使其工作并且工作正常:

_.keyBy(_.values(data), 'email');

有没有更好的方法可以用 lodash 处理它?我是 lodash 的新手,我想了解代码是否可以进一步重构。

标签: javascriptlodash

解决方案


如果您正在寻找 Vanilla JavaScript 解决方案,您可以array#reduce这样使用:

users =  {
    1: {
        name: "John",
        email: "john@test.com",
        id: 1,
        place: "NY"
    },
    2: {
        name: "Alex",
        email: "alex@test.com",
        id: 2,
        place: "FL"
    },
    3: {
        name: "Tony",
        email: "tony@test.com",
        id: 3,
        place: "TX"
    }
  }

let newUsers = Object.keys(users).reduce((obj, key) => {
  obj[users[key].email] = users[key];
  return obj;
}, {});

console.log(newUsers);


推荐阅读