{"id":28566949,"url":"https://github.com/pschina/clone-rename","last_synced_at":"2025-06-10T15:40:36.142Z","repository":{"id":57200573,"uuid":"160881862","full_name":"PsChina/clone-rename","owner":"PsChina","description":null,"archived":false,"fork":false,"pushed_at":"2018-12-09T14:57:44.000Z","size":14,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-05-10T11:46:36.700Z","etag":null,"topics":["deep-clone","rename-keys"],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/PsChina.png","metadata":{"files":{"readme":"README.CN.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2018-12-07T22:28:38.000Z","updated_at":"2022-08-30T08:29:16.000Z","dependencies_parsed_at":"2022-09-16T15:10:35.580Z","dependency_job_id":null,"html_url":"https://github.com/PsChina/clone-rename","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PsChina%2Fclone-rename","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PsChina%2Fclone-rename/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PsChina%2Fclone-rename/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PsChina%2Fclone-rename/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/PsChina","download_url":"https://codeload.github.com/PsChina/clone-rename/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PsChina%2Fclone-rename/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":259104303,"owners_count":22805851,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["deep-clone","rename-keys"],"created_at":"2025-06-10T15:40:07.903Z","updated_at":"2025-06-10T15:40:36.128Z","avatar_url":"https://github.com/PsChina.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# clone-rename\n\n[English](https://github.com/PsChina/clone-rename)\n\n深拷贝你的对象并且重命名属性。\n\n## 开始\n\n```bash\n\u003e npm install clone-rename\n```\n\n## 何时使用\n\n前后端分离的情况下，后端返回数据的属性名称和前端独立开发时使用的属性名称不一样。\n\n### 例子\n\n后端返回数据的属性名称是 `id` 和 `name` 但是 mock 数据时前端使用的是 `goodsID` 和 `goodsName`。\n\n#### 拷贝数组\n\n```js\nimport cloneRename from 'clone-rename';\n\nconst res = [\n    {\n        id: '001',\n        name: 'apple'\n    },\n    {\n        id: '002',\n        name: 'banana'\n    }\n]\n\nconst filter = {\n    id:'goodsID', // 将所有属性为 id 的 key 更改为 goodsID 。\n    name: 'goodsName' // 将所有属性为 name 的 key 更改为 goodsName 。\n}\n\nconst result = cloneRename(res,filter) // 默认是深拷贝\n\n/*\nresult:\n[\n    {\n        goodsID: '001',\n        goodsName: 'apple'\n    },\n    {\n        goodsID: '002',\n        goodsName: 'banana'\n    }\n]\n*/\n```\n\n#### 拷贝对象\n\n它还能拷贝对象\n\n```js\n\nimport cloneRename from 'clone-rename';\n\nlet project = {name:'JavaScript'}\n\nlet obj = {\n    name:'PsChina',\n    age:'25',\n    like:[project]\n}\n\nconst filter = {\n    name:'babel' // 将所有属性名为 name 的 key 改名为 babel 。\n}\n\nconst result1 = cloneRename(obj,filter) // 第三个参数不传递默认是开始深拷贝和深度更改键名。{deepCopy:true, deepRename:true}\n/*\nresult1:\n{\n    babel:'PsChina',\n    age:'25',\n    like:[{babel:'JavaScript'}]\n}\n*/\nresult1.like[0] === project // false\n```\n\n浅层拷贝\n\n```js\nconst result2 = cloneRename(obj,filter,{deepCopy:false})\n\n/*\nresult2:\n{\n    babel:'PsChina',\n    age:'25',\n    like:[{name:'JavaScript'}]\n}\n*/\n\nresult2.like[0] === project // true\n```\n\n浅层重命名\n\n```js\nconst result3 = cloneRename(obj,filter,{deepRename:false})\n\n/*\nresult3:\n{\n    babel:'PsChina',\n    age:'25',\n    like:[{name:'JavaScript'}]\n}\n*/\nresult3.like[0] === project // false\n\n\n```\n\n## 拷贝\n\n它还能拷贝 date 对象和 function 以及正则表达式\n\n### 拷贝日期对象\n\n```js\nlet time = new Date();\n\nlet sameTime = cloneRename(time);\n\nconsole.log(time, sameTime ,time===sameTime);\n// \u003ccurrentTime\u003e \u003ccurrentTime\u003e false\n```\n\n### 拷贝函数\n\n```js\nfunction sum(a, b){\n    return a + b;\n};\n\nlet sameSum = cloneRename(sum);\n\nsum(1,2);\n//3\n\nsameSum(1,2);\n//3\n\nconsole.log(sum === sameSum);\n//false\n```\n\n### 拷贝正则表达式\n\n```js\nlet numberRegObj = {reg:/[0-9]/};\n\nlet newRegObj = cloneRename(numberRegObj);\n\nconsole.log(numberRegObj, newRegObj, numberRegObj.reg === newRegObj.reg);\n// {reg:/[0-9]/} {reg:/[0-9]/} false\n```","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpschina%2Fclone-rename","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpschina%2Fclone-rename","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpschina%2Fclone-rename/lists"}