我得到了以下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的新手,我想了解代码是否可以进一步重构。
答案 0 :(得分:2)
如果您正在寻找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);
答案 1 :(得分:2)
请参见_.keyBy()
接受集合(数组或对象),您可以跳过_.values()
调用:
const 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"}};
const result = _.keyBy(users, 'email');
console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.10/lodash.min.js"></script>