Javascript 纯方式修改JS对象
我有一个转换JS对象的函数。它从现有属性派生新属性,然后删除原始属性。基本上是这样的: /**从name属性派生capName属性,然后删除name*/ 职能转变人{ person[capName]=person[name].toUpperCase; 删除个人[姓名]; 返回人; } var myPerson={ 姓名:乔, 年龄:20 }; var newPerson=transformmyPerson; console.logmyPerson,newPerson 只需使用Object.assign,它将创建具有新引用的新对象 职能转变人{ var obj=Object.assign{},person; obj[capName]=obj[name].toUpperCase; 删除obj[名称]; 返回obj; } var myPerson={ 姓名:乔, 年龄:20 }; var newPerson=transformmyPerson; console.log'newPerson:',newPerson; console.log“myPerson:”,myPerson 只需使用Object.assign,它将创建具有新引用的新对象 职能转变人{ var obj=Object.assign{},person; obj[capName]=obj[name].toUpperCase; 删除obj[名称]; 返回obj; } var myPerson={ 姓名:乔, 年龄:20 }; var newPerson=transformmyPerson; console.log'newPerson:',newPerson;Javascript 纯方式修改JS对象,javascript,ecmascript-6,functional-programming,ecmascript-5,Javascript,Ecmascript 6,Functional Programming,Ecmascript 5,我有一个转换JS对象的函数。它从现有属性派生新属性,然后删除原始属性。基本上是这样的: /**从name属性派生capName属性,然后删除name*/ 职能转变人{ person[capName]=person[name].toUpperCase; 删除个人[姓名]; 返回人; } var myPerson={ 姓名:乔, 年龄:20 }; var newPerson=transformmyPerson; console.logmyPerson,newPerson 只需使用Object.as
console.log'myPerson:',myPerson 分解结构非常简单:
const transform = ({ name, ...rest }) => ({ capName: name.toUpperCase(), ...rest });
我真的需要与ES5兼容
使用,它会让你的生活变得更加轻松。非常容易进行分解:
const transform = ({ name, ...rest }) => ({ capName: name.toUpperCase(), ...rest });
我真的需要与ES5兼容
使用,它使您的生活变得更加轻松。为了与ES5兼容,您可以使用JSON.parseJSON.stringifyperson。请注意,附加到person的方法会丢失,因为它们无法正确地进行JSON.stringify /**从name属性派生capName属性,然后删除name*/ 职能转变人{ var obj=JSON.parseJSON.stringifyperson; obj[capName]=obj[name].toUpperCase; 删除obj[名称]; 返回obj; } var myPerson={ 姓名:乔, 年龄:20 }; var newPerson=transformmyPerson;
console.logmyPerson,newPerson 为了与ES5兼容,可以使用JSON.parseJSON.stringifyperson。请注意,附加到person的方法会丢失,因为它们无法正确地进行JSON.stringify /**从name属性派生capName属性,然后删除name*/ 职能转变人{ var obj=JSON.parseJSON.stringifyperson; obj[capName]=obj[name].toUpperCase; 删除obj[名称]; 返回obj; } var myPerson={ 姓名:乔, 年龄:20 }; var newPerson=transformmyPerson;
console.logmyPerson,newPerson 您可以生成一个新对象,而不需要不需要的属性和新属性 职能转变人{ 返回对象 .钥匙人 .约化函数r,k{ 如果k=='name'{ r、 capName=person.name.toUpperCase; }否则{ r[k]=人[k]; } 返回r; }, {}; } var myPerson={姓名:乔,年龄:20}, newPerson=transformmyPerson; console.logmyPerson;
console.lognewPerson 您可以生成一个新对象,而不需要不需要的属性和新属性 职能转变人{ 返回对象 .密钥人 .约化函数r,k{ 如果k=='name'{ r、 capName=person.name.toUpperCase; }否则{ r[k]=人员[k]; } 返回r; }, {}; } var myPerson={姓名:乔,年龄:20}, newPerson=transformmyPerson; console.logmyPerson;
console.lognewPerson;为什么你创建capName只是为了立即删除它?这也是一个输入错误,我的错!!顺便说一句,这个函数不是纯粹的…为什么你创建capName只是为了立即删除它?还有一个打字错误,我的坏!!顺便说一句,这个函数不是纯粹的…@jonaswillms True,但是OP显示的对象没有自己的方法。尽管如此,还是值得一提。@Jonaswillms添加了这条信息,并添加了一个迭代person的ownProperties的版本。酷!我现在不担心保留任何方法。这里的两个解决方案都非常好。@jonaswillms-True,但是OP显示的对象没有自己的方法。尽管如此,还是值得一提。@Jonaswillms添加了这条信息,并添加了一个迭代person的ownProperties的版本。酷!我现在不担心保留任何方法。这里的两个解决方案都非常好。Object.assign也是ES2015。他们明确要求ES5。@connexo是的,我将其与ES2015混合,但无论如何,我也希望看到ES6解决方案。这没有错。tooObject.assign也是ES2015。他们明确要求ES5。@connexo是的,我将其与ES2015混合,但无论如何,我也希望看到ES6解决方案,这并没有错,因为我可以很好地将其传输。谢谢我可以很好地传输这个。谢谢