javascript - 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 的新手,我想了解代码是否可以进一步重构。
解决方案
如果您正在寻找 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);
推荐阅读
- kubernetes - 可以加入集群,但无法获取 kubeadm-config
- c++ - 带有 Linux 的 Raspberry 上基于事件的 UART 输入
- php - 如何在 PHP 中根据匹配值和顺序比较两个数组?
- java - 如何用正则表达式替换组的内容
- css - 所有全局伪元素的样式,例如 :before?
- reactjs - “rollup-plugin-node-resolve”无法与 react 的“useState”一起使用,如何解决?
- php - 如何使用morris js为饼图的动态数据着色?
- php - Laravel eloquent orderby 相关模型的列总和(有很多关系)
- python - 使用 tf.data.Dataset 时如何解决 OOM 错误?
- xml - XSLT 是否支持 Clark 表示法?