我正在尝试实现克隆功能,但不确定在尝试克隆'[object Function]'
时是否执行正确。您将在底部看到结果。我不确定期望的结果是否应该看起来像原始输入数据。让我知道您的想法,以及您对如何实施它有任何想法。这是代码。
UPD :实际上,它可以正常工作。我将其保留在此处,以便人们在有相同问题时可以使用它。
function deep(value) {
if (typeof value !== 'object' || value === null) {
return value;
}
if (Array.isArray(value)) {
return deepArray(value);
}
return deepObject(value);
}
function deepObject(source) {
const result = {};
Object.keys(source).forEach(key => {
const value = source[key];
result[key] = deep(value);
});
return result;
}
function deepArray(collection) {
return collection.map(value => {
return deep(value);
});
}
const id1 = Symbol('id');
const value = {
a: 2,
f: id1,
b: '2',
c: false,
g: [
{ a: { j: undefined }, func: () => {} },
{ a: 2, b: '2', c: false, g: [{ a: { j: undefined }, func: () => {} }] }
]
};
结果
{ a: 2,
f: Symbol(id),
b: '2',
c: false,
g:
[ { a: { j: undefined }, func: [Function: func] },
{ a: 2,
b: '2',
c: false,
g: [ { a: { j: undefined }, func: [Function: func] } ] } ] }
答案 0 :(得分:1)
您无法克隆箭头函数,当克隆具有箭头函数作为属性的对象时,它们将始终绑定到创建它们的对象,因此无法重新绑定它们,这是箭头函数的全部内容,可以预见此对象的行为。如果要克隆对象,请确保引用该对象的所有功能都是常规功能,而不是箭头功能。
答案 1 :(得分:0)
最好在单个代码下使用以下代码进行深度复制-
isthai