js基本常用方法——重命名(替换)key

文章介绍了在JavaScript中重命名对象键的多种方法,包括renameKeys函数、replace方法、进阶版replace、renameObjectKey函数、reduce迭代方法、删除原属性以及使用map递归处理数组对象的键。这些方法展示了如何灵活地转换和操作对象属性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、重命名对象的key

1、renameKeys

  • 代码
        console.log('-----------------方法1-----------------');
        const obj = {a: "小明", b: "20"};
        const newKeys = {a: "name", b: "age"};
        console.log('要转化的数据:\n',obj);
        const renamedObj = renameKeys(obj, newKeys);
        console.log('结果:\n',renamedObj);
        console.log('--------------------------------------');
  • 结果
    {a: “小明”, b: “20”} 改成 {name: ‘小明’, age: ‘20’}
    在这里插入图片描述

2、replace方法替换指定名称

  • 代码
  		console.log('-----------------方法2---------------');
        let object = {name: "小明", id: 20, sex: false};
        console.log('要转化的数据:\n',object);
        let str = JSON.stringify(object);
        //依次修改对象中的每一个对象
        str = str.replace('name', 'mingzi');
        str = str.replace('id', 'age');
        object = JSON.parse(str);
        console.log('结果:\n',object);
        console.log('--------------------------------------');
  • 结果
    name替换成了mingzi ,id替换成了age
    在这里插入图片描述

3、replace进阶版替换

  • 代码
        console.log('-----------------方法2进阶---------------');
        let object1 = {name: "小明", id: 20, sex: false};
        const targetKeys = ['MingZi','Age','Sex'];
        const keys = [];
        for (var key in object1) {
            keys.push(key);
        }
        console.log('要转化的数据:\n',object1);
        let str1 = JSON.stringify(object1);
        //tarKeys的数组长度和object1的key值长度一致,不一致也没影响,无论谁多谁少
        for (let i = 0;i<targetKeys.length;i++){
            str1 = str1.replace(keys[i],targetKeys[i])
        }
        object1 = JSON.parse(str1);
        console.log('结果:\n',object1);
        console.log('----------------------------------------');
  • 结果
    name替换成了MingZi
    id替换成了Age
    sex替换成了XingBie
    在这里插入图片描述

4、封装方法renameObjectKey遍历替换

  • 代码
  		console.log('-----------------方法4---------------');
        function renameObjectKey(oldObj, oldName, newName) {
            const newObj = {};
            Object.keys(oldObj).forEach(key => {
                const value = oldObj[key];
                if (key === oldName) {
                    newObj[newName] = value;
                } else {
                    newObj[key] = value;
                }
            });
            return newObj;
        }
        let object2 = {name: "小明", id: 20, sex: false};
        console.log('要转化的数据:\n',object2)
        //id替换为age
        object2 = renameObjectKey(object2, 'id', 'age');
        console.log('结果:\n',object2);
        console.log('--------------------------------------');
  • 结果
    id替换成了age
    在这里插入图片描述

5、利用迭代方法reduce替换key

  • 代码
        console.log('-----------------方法5---------------');
        let object3 = {key1: "小明", key2: 20, key3: false};
        const keyMap = {key1: "name", key2: "age", key3: "sex"};
        console.log('要转化的数据:\n',object3)
        const mappedData = Object.keys(keyMap).reduce((obj, k) => Object.assign(obj, {[keyMap[k]]: object3[k]}), {});
        console.log('结果:\n',mappedData);
        console.log('--------------------------------------');
  • 结果
    key1、key2、key3替换成了 name、age、sex
    在这里插入图片描述

6、遍历最小差异化替换key,删除原属性

  • 代码
        console.log('-----------------方法6---------------');
        let object4 = {
            "_id": "00607",
            "_email": "user1@gmail.com",
            "name": "小明"
        };
        console.log('要转化的数据:\n',object4)
        const new_key = "id";
        const old_key = "_id";
        //最小差异化替换key
        Object.keys(object4).forEach(key => {
            if (key === old_key) {
                object4[new_key] = object4[key];
                delete object4[key];
            } else {
                object4[`_${key}`] = object4[key];
                delete object4[key];
                object4[`${key}`] = object4[`_${key}`];
                delete object4[`_${key}`];
            }
        });
        console.log('结果:\n',object4);
        console.log('--------------------------------------');
  • 结果
    _id替换成了id
    在这里插入图片描述

7、对数组替换key的操作(map递归)

  • 代码
        //需求是将数组b根据a的值替换对象中的key值
 		console.log('-----------------方法7-----------------');
        let a = ["code", "name", "date"];
        let b = [{m1: 2, m2: 3, m3: 4, m4: 8}, {c1: 2, c2: 3, c3: 4}, {a1: 'knn', a2: 3, a3: 4, a4: 19}];
        console.log('要转化的数据:\n', b)
        //item 数组的每一个对象、index 数组下标、arr 即数组b
        let c = b.map((item, index, arr) => {
            let obj = {};
            var mm1 = 0;
            for (let i in item) {
                if (mm1 < a.length){
                    obj[a[mm1]] = item[i];
                    mm1++;
                }else {
                    //如果不需要可以不写
                    obj[i] = item[i];
                }
            }
            return obj;
        });
        console.log('结果:\n', c);
        // {code: 2, name: 3, date: 4, m4: 8}
        // {code: 2, name: 3, date: 4}
        // {code: 'knn', name: 3, date: 4, a4: 19}
        console.log('--------------------------------------');
  • 结果
    将数组b中的key替换成指定a = [“code”, “name”, “date”]的key
  • 在这里插入图片描述
### 可能的原因分析 文件上传后下载显示损坏可能由以下几个原因引起: 1. **文件流处理不正确** 如果在上传过程中未正确读取或写入文件流,可能导致文件内容被篡改或截断。这通常发生在自定义 `formData` 提交逻辑时[^1]。 2. **编码问题** 文件传输过程中可能存在字符集转换错误,尤其是二进制文件(如图片、压缩包等)。如果服务端对接收到的内容进行了不必要的解码操作,则可能会破坏原始文件结构[^4]。 3. **存储路径或命名冲突** 后端存储文件时可能出现路径覆盖或者文件名重复的情况,导致最终保存的文件并非客户端上传的真实文件[^2]。 4. **前后端约定不符** 前端传递给后端的数据格式与后端预期不同,例如前端发送的是相对路径而后端期望绝对路径,反之亦然[^3]。 --- ### 解决方案 #### 1. 确保文件流处理无误 检查前端代码中是否正确构建了 `FormData` 对象并将其提交至后端。以下是标准实现方式: ```javascript function handleUpload(file) { const formData = new FormData(); formData.append('file', file); // 添加文件到formdata对象 axios.post('/upload', formData, { headers: { 'Content-Type': 'multipart/form-data' } }).then(response => { console.log('File uploaded successfully:', response.data); }); } ``` 同时确认后端是否有能力解析 multipart 请求中的文件字段,并妥善保存文件内容。 #### 2. 验证文件编码一致性 确保整个流程中没有任何环节对文件进行额外的 Base64 编码或其他形式的文字化处理。对于二进制文件来说,任何非必要的字符串转义都可能是致命的。可以尝试以下方法验证: - 使用工具对比上传前后的 MD5 或 SHA 校验值; - 手动测试简单文本文件以排除复杂场景干扰。 #### 3. 调整存储策略避免覆盖 针对多用户并发上传同一名称文件的情形,建议采用时间戳加随机数作为唯一标识符来重命名每个文件实例。这样既可防止意外替换又能简化后续检索过程: ```csharp string fileNameWithExtension = Path.GetFileNameWithoutExtension(fileName) + "_" + Guid.NewGuid().ToString() + Path.GetExtension(fileName); System.IO.File.WriteAllBytes(Path.Combine(uploadPath, fileNameWithExtension), bytes); ``` #### 4. 统一接口协议 明确双方关于资源定位的具体需求——到底是需要完整的 URL 还仅仅是内部 ID/Key?一旦确定下来就要严格遵守以免造成误解引发异常行为。 --- ### 总结 综上所述,要彻底解决 EL-UPLOAD 导致的文件损坏现象需从多个角度入手排查潜在隐患点;具体措施包括但不限于优化数据封装机制、强化安全校验手段以及完善基础架构设计等方面的工作。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值