繁体   English   中英

以纯方式修改JS对象

Modify JS Object in Pure Way

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我有一个转换JS对象的函数。 它从现有属性派生一个新属性,然后删除原始属性。 本质上是这样的:

 /** Derives "capName" property from "name" property, then deletes "name" */ function transform(person) { person["capName"] = person["name"].toUpperCase(); delete person["name"]; return person; } var myPerson = { name: "Joe", age: 20 }; var newPerson = transform(myPerson); console.log(myPerson, newPerson); 

该函数返回所需的newPerson对象,但也会修改原始的myPerson对象。 我宁愿以纯粹的方式执行此操作,而不会修改原始的myPerson对象。

注意 :我确实需要与ES5兼容,但是我也希望看到ES6解决方案。

4 个回复

只需使用Object.assign创建具有新引用的新对象

 function transform(person) { var obj = Object.assign({}, person); obj["capName"] = obj["name"].toUpperCase(); delete obj["name"]; return obj; } var myPerson = { name: "Joe", age: 20 }; var newPerson = transform(myPerson); console.log('newPerson:', newPerson); console.log('myPerson:', myPerson); 

解构非常容易:

 const transform = ({ name, ...rest }) => ({ capName: name.toUpperCase(), ...rest });

我真的需要与ES5兼容

使用BabelJS ,它使您的生活更加轻松自在

为了实现ES5兼容性,可以使用JSON.parse(JSON.stringify(person)) 请注意,附加到person的方法在途中会丢失,因为它们无法正确进行JSON.stringify ed。

 /** Derives "capName" property from "name" property, then deletes "name" */ function transform(person) { var obj = JSON.parse(JSON.stringify(person)); obj["capName"] = obj["name"].toUpperCase(); delete obj["name"]; return obj; } var myPerson = { name: "Joe", age: 20 }; var newPerson = transform(myPerson); console.log(myPerson, newPerson); 

如果要保留方法,只需遍历对象键即可:

 /** Derives "capName" property from "name" property, then deletes "name" */ function transform(person) { var obj = {}; for (var key in person) { obj[key] = person[key]; } obj["capName"] = obj["name"].toUpperCase(); delete obj["name"]; return obj; } var myPerson = { name: "Joe", age: 20 }; var newPerson = transform(myPerson); console.log(myPerson, newPerson); 

请注意,所提供的方法均未进行深度克隆。 为此,我建议您使用lodash的_.clone(obj, { deep: true });

您可以生成没有不需要的属性和新属性的新对象。

 function transform(person) { return Object .keys(person) .reduce(function (r, k) { if (k === 'name') { r.capName = person.name.toUpperCase(); } else { r[k] = person[k]; } return r; }, {}); } var myPerson = { name: "Joe", age: 20 }, newPerson = transform(myPerson); console.log(myPerson); console.log(newPerson); 

1 在jQuery对象和纯js对象之间转换?

$('#elementID')返回的对象与document.getElementById('elementID')返回的对象有什么document.getElementById('elementID') ? 而且,你怎么能轻易地从一个转换到另一个? 例如: 这已经困扰了我一段时间 ...

2 有没有更简单的方法来用纯js获取formData?

我的html结构如下,表格嵌套在表格中, input一些信息或option中的select将通过ajax发送。 我用下面的代码获取了formData,验证了表单中的所有数据都可以获取。 这里的行有点长,我想要更多小的 js 代码。 使用纯 js 而不是 jQuery 获取 formData ...

3 使用 ES6 Pure 函数修改对象数组

我正在使用纯函数修改对象数组,但在修改 userDetails 对象时面临一些挑战。 我的要求是1 ,我需要在权限对象中显示true 。 请检查我的代码并提出建议。 我知道,我犯了一些小错误,但仍在尝试识别。 我不希望主要数据源受到影响。 请建议您是否有其他好的选择 let dat ...

5 如何使用纯JS更改对象结构

这个问题已经在这里有了答案: 按名称空间转换对象 2个答案 我正在努力改变对象的结构。 我想从中转换对象: 变成这个: 我的解决方案无法正常工作,我也不知道如何解决。 我的解决方案: var data = { "a1.img": ...

6 在jQuery中修改对象数组的方法

我正在做一个制作乘客详细信息列表的项目,所以我将乘客对象列表存储在一个数组中,如下所示: var object = { passengerDetails[0].age: "22" , passengerDetails[0].gender: "M" , passengerDetails[0] ...

7 以函数方式修改对象的属性

在javascript编程中,函数式的方式是一个很大的好处。 我正在尝试以功能方式修改对象数组中包含的对象的属性,这意味着无法修改作为在map函数中传递的对象的项目。 如果我做这样的事情: 这不起作用,因为 item 在函数内部被修改。 你知道这个问题的任何其他方法吗? ...

8 有没有办法修改jQuery对象本身?

在jquery对象上使用.add , .remove等函数时,jQuery对象本身未修改,结果被返回的新jQuery对象捕获。 有没有办法修改对象本身? 我需要它,因此我可以使用通过引用传递的jQuery编写函数,如下所示: 重要说明:此代码示例仅是出于“通过引用传递值”的目 ...

9 有没有办法在python中修改datetime对象?

在功能主要我有 python抱怨:赋值之前引用了局部变量'date',这是预期的。 在main()的其他部分中,我注意不要分配,而是要修改,因此例如 哪个python很高兴(如果我设置了例如a_cats = a_cats.clear()则不会)。 有没有一种方法可以在不显 ...

10 修改JS中的初始对象值

我有一个代码,它采用下一个数组: const arr = [ { name:'', age:55 }, { name:'Bill', age:'' }, ] ..我应该考虑到,如果键不包含值,我应该为该键输出值: no data ; 最后我应该得到这样的东西: ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM