$('#elementID')返回的对象与document.getElementById('elementID')返回的对象有什么document.getElementById('elementID') ? 而且,你怎么能轻易地从一个转换到另一个? 例如: 这已经困扰了我一段时间 ...
提示:本站收集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解决方案。
只需使用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);
为了实现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);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.