javascript - 定位键 :value of an object

标签 javascript

<分区>

有什么方法可以将对象内的 key:value 对从一个位置移动到另一个位置?我在数组上知道这一点,我在谷歌上搜索了一种简单的方法,但没有成功。

我将一个键从“id”重命名为“mentorId”,它占据了最后一个位置,但我想排在第一个位置。

重命名代码

 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.keysfor..in 循环)。

如果您使用的方法在 ES6+ 中确实有一个保证顺序来遍历键(比如 Reflect.ownKeys、对象 rest/spread、 Object.assignObject.getOwnPropertyDescriptorsObject.getOwnPropertyNames 等等 - 查看 OwnPropertyKeys 的用法),然后其他键必须在添加 mentorId 键后添加。虽然这可以通过一些杂乱的 delete 进行突变来完成,但为数组中的那个位置创建一个全新的对象可能会更干净:

const body = {
    "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
        }
    ]
};

const { id, ...rest } = body.data[0];
body.data[0] = {
  mentorId: id,
  ...rest
};
console.log(body.data);

关于javascript - 定位键 :value of an object,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57531833/

相关文章:

javascript - Next.js:匹配根 '/' 和动态路由 '/param' 的页面

javascript - 扩展 `super()` 时使用 `Object`

php - 从 PHP 生成 Javascript/ExtJS 代码的最可维护的方法是什么?

javascript - 解析 Javascript- 使用其他一些参数上传图像

javascript - 清楚 ECMAScript/JavaScript 中 "LexicalEnvironment"和 "VariableEnvironment"之间的区别

javascript - 如何使用 React.cloneElement 克隆多个 child ?

javascript - 使用 CSS background-size 时获取背景图像的新高度 : cover?

javascript - 游戏中的简单 javaScript 错误 - 图像不垂直移动

javascript - AngularJS 模块如何工作?

javascript - 如何打印出保存在 "contacts"数组中的每个对象