Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/373.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 纯方式修改JS对象_Javascript_Ecmascript 6_Functional Programming_Ecmascript 5 - Fatal编程技术网

Javascript 纯方式修改JS对象

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

我有一个转换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;
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解决方案,这并没有错,因为我可以很好地将其传输。谢谢我可以很好地传输这个。谢谢