提问人:mattdags 提问时间:3/15/2022 更新时间:3/15/2022 访问量:621
创建函数以将属性从一个对象复制到另一个对象
Create Function to Copy Properties From One Object to Another
问:
我正在尝试创建一个函数,该函数将从源对象复制所有属性并将它们粘贴到目标对象。我想创建一个深层副本,所以我没有使用 object.assign()。
这是我的代码:
var obj1 = {
arr: ['a','b','c','d'], // >= 4 elements, all should be truthy
obj: {a:1,b:2,c:3,d:4}, // >= 4 values, all should be truthy
halfTruthyArr: [null,'b',null,'d'], // >= 4 elements, half should be falsy
halfTruthyObj: {a:1,b:null,c:3,d:null}, // >= 4 values, half should be falsy
string: 'This is a string.',
reverseString: function (string) {
if (typeof string === 'string') return string.split('').reverse().join('');
}
};
var obj2 = {}
function extend(destination, source) {
destination = JSON.parse(JSON.stringify(source))
}
extend(obj2,obj1)
console.log(obj2)
- 使用该函数不会更改 obj2。我知道该函数使用通过引用传递,这就是不重新分配对象的原因。有没有办法解决这个问题,以便编辑我作为参数传入的对象?
- obj1 中的 reverseString 方法不会使用 JSON.stringify 进行复制。为什么会这样?
答:
0赞
Serge
3/15/2022
#1
如果要在函数中设置对象或数组的值,则为“按值传递”。因此,您需要通过引用传递对象或尝试此操作
function extend(source) {
return JSON.parse(JSON.stringify(source))
}
var obj2=extend(obj1);
console.log("ext",obj2)
或通过引用传递。在这种情况下,您只是更改对象内部的属性,而不是为整个对象分配新值
function extend(source, destination) {
destination.result = JSON.parse(JSON.stringify(source));
}
var destination = { result: {} };
extend(obj1, destination);
var obj2=destination.result;
console.log("ext", obj2);
评论
undefined
、s 和 s 不是有效的 JSON 值。如果在转换过程中遇到任何此类值,则它们要么被省略(在对象中找到时)要么更改为 null(在数组中找到时)“ developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/...Function
Symbol