Javascript 定位关键点:对象的值
是否有任何方法可以将对象内的键:值对从一个位置移动到另一个位置?我在数组上知道这一点,我在谷歌上搜索了一个简单的方法,但徒劳 我将一把钥匙从“id”重命名为“导师id”,它占据了最后一个位置,但我想占据第一个位置 重命名代码Javascript 定位关键点:对象的值,javascript,Javascript,是否有任何方法可以将对象内的键:值对从一个位置移动到另一个位置?我在数组上知道这一点,我在谷歌上搜索了一个简单的方法,但徒劳 我将一把钥匙从“id”重命名为“导师id”,它占据了最后一个位置,但我想占据第一个位置 重命名代码 value['mentorId'] = value['id']; delete value['id']; { "status": 200, "message": "All Mentors", "data": [ {
value['mentorId'] = value['id'];
delete value['id'];
{
"status": 200,
"message": "All Mentors",
"data": [
{
"first_name": "Brick",
"last_name": "Ken",
"email": "brick@gmail.com",
"address": "kigali",
"bio": "so successful",
"occupation": "army",
"expertise": "3 years",
"is_admin": false,
"is_mentor": true,
"mentorId": 2
}
]
}
我的回应主体
value['mentorId'] = value['id'];
delete value['id'];
{
"status": 200,
"message": "All Mentors",
"data": [
{
"first_name": "Brick",
"last_name": "Ken",
"email": "brick@gmail.com",
"address": "kigali",
"bio": "so successful",
"occupation": "army",
"expertise": "3 years",
"is_admin": false,
"is_mentor": true,
"mentorId": 2
}
]
}
除此之外,其他一切都很好。谢谢你的帮助。谢谢
问题已解决
value['mentorId'] = value['id'];
delete value['id'];
{
"status": 200,
"message": "All Mentors",
"data": [
{
"first_name": "Brick",
"last_name": "Ken",
"email": "brick@gmail.com",
"address": "kigali",
"bio": "so successful",
"occupation": "army",
"expertise": "3 years",
"is_admin": false,
"is_mentor": true,
"mentorId": 2
}
]
}
我最近问了这个问题,感谢所有优秀开发人员的帮助,我使用了你们的输入,搜索了互联网,最终找到了解决方案。下面是我如何在这个allMentors静态方法中实现我想要的:
static async allMentors(req, res) {
try {
users.forEach(user => {
if(user.is_mentor === true) {
mentors.push(user);
}
})
const ObjKeyRename = (src, map) => {
const dst = {};
for (const key in src) {
if (key in map)
// rename key
dst[map[key]] = src[key];
else
// same key
dst[key] = src[key];
}
return dst;
};
const uniqueMentors = Array.from(new Set(mentors.map(m => m.id)))
.map(id => {
return new Promise((resolve, reject)=> {
const currMentor = mentors.find(m => m.id === id);
const modMentor = ObjKeyRename(currMentor, { "id": "mentorId" });
return resolve(modMentor);
})
})
Promise.all(uniqueMentors).then(output => {
output.forEach(async obj => {
await delete obj['password'];
})
return res
.status(200)
.json(new ResponseHandler(200, 'All Mentors', output, null).result());
})
对象属性不能总是依赖于排序。有时可以,但通常不是(比如JSON序列化/反序列化、
Object.keys
和for..in
循环)
如果您使用的方法在ES6+中对键的迭代顺序有保证(如Reflect.ownKeys
、对象rest/spread、object.assign
、object.getOwnPropertyDescriptors
、object.getOwnPropertyNames
,等等-查找的用法),然后,在添加menterid
键之后,必须添加其他键。虽然这可以通过一些凌乱的delete
s进行变异,但为数组中的该位置创建一个全新的对象可能会更干净:
const body={
“地位”:200,
“信息”:“所有导师”,
“数据”:[
{
“名字”:“砖头”,
“姓”:“肯”,
“电子邮件”:brick@gmail.com",
“地址”:“基加利”,
“bio”:“非常成功”,
“占领”:“军队”,
“专业知识”:“3年”,
“is_admin”:false,
“是导师”:没错,
“导师ID”:2
}
]
};
const{id,…rest}=body.data[0];
body.data[0]={
导师id:id,
休息
};
console.log(body.data)代码>您有一个包含一个对象的数组。这是您想要的,还是每个key:value对都是一个元素?也就是说,通常最好不要首先依赖属性顺序,而是让依赖它的代码更灵活。@OldProgrammer,我打算在导师数组中有许多具有增量导师ID的对象。我对答案投了赞成票,但我的声望仍然不到15,因为我刚刚开始与这里的开发人员社区进行交互,你知道我的赞成票不会公开改变投票结果。