Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 定位关键点:对象的值_Javascript - Fatal编程技术网

Javascript 定位关键点:对象的值

Javascript 定位关键点:对象的值,javascript,Javascript,是否有任何方法可以将对象内的键:值对从一个位置移动到另一个位置?我在数组上知道这一点,我在谷歌上搜索了一个简单的方法,但徒劳 我将一把钥匙从“id”重命名为“导师id”,它占据了最后一个位置,但我想占据第一个位置 重命名代码 value['mentorId'] = value['id']; delete value['id']; { "status": 200, "message": "All Mentors", "data": [ {

是否有任何方法可以将对象内的键:值对从一个位置移动到另一个位置?我在数组上知道这一点,我在谷歌上搜索了一个简单的方法,但徒劳

我将一把钥匙从“id”重命名为“导师id”,它占据了最后一个位置,但我想占据第一个位置

重命名代码

 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,因为我刚刚开始与这里的开发人员社区进行交互,你知道我的赞成票不会公开改变投票结果。