我必须操纵一个嵌套对象。这是我的代码:
function modify(object) {
Object.keys(object).forEach(key => {
if (typeof object[key] === 'object') {
if (object[key].class && object[key].type && object[key].period) {
object[key].applicableName = `${object[key].class}|${object[key].type}|${object[key].period}`;
delete object[key].class;
delete object[key].type;
delete object[key].period;
} else {
modify(object[key]);
}
}
});
}
这里是对象
[
{
"item": [
{
"period": "period-CYTM",
"type": "type-CMLT",
"class": "class-RFEE",
},
{
"period": "period-FYTD",
"type": "type-CMLT",
"class": "class-RFEE",
},
{
"period": "period-ITD",
"type": "type-ANNL",
"class": "class-RFEE",
},
{
"period": "period-ITD",
"type": "type-CMLT",
"class": "class-RFEE",
},
{
"period": "period-1MTH",
"type": "type-CMLT",
"class": "class-RFEE",
},
{
"period": "period-1YR",
"type": "type-CMLT",
"class": "class-RFEE",
},
{
"period": "period-10YR",
"type": "type-ANNL",
"class": "class-RFEE",
},
{
"period": "period-10YR",
"type": "type-CMLT",
"class": "class-RFEE",
}
]
}
]
它工作正常,但是问题在于它正在变异原始对象。 如何使我的modify
方法返回一个新的修改后的对象,而原始对象保持不变?
我试图克隆原始对象,然后将克隆的对象传递给modify
方法,但是,在我看来,这并不是一个很好的解决方案。
答案 0 :(得分:0)
如何在您的函数中即时复制?
function modify(object) {
const copy = {};
Object.keys(object).forEach(key => {
if (typeof object[key] === 'object') {
if (object[key].class && object[key].type && object[key].period) {
copy[key].applicableName = `${object[key].class}|${object[key].type}|${object[key].period}`;
} else {
copy[key] = modify(object[key]);
}
} else {
copy[key] = object[key];
}
});
return copy;
}
答案 1 :(得分:0)
我尝试克隆原始对象,然后将克隆的对象传递给Modify方法,但是,在我看来,这不是一个很好的解决方案。
为什么?您不想修改原始对象,在这种情况下,克隆对象是最佳实践。
您也可以在函数内部进行克隆。
function modify(object) {
//cloning object
var copyObject = object.constructor();
Object.keys(copyObject ).forEach(key => {
if (typeof copyObject[key] === 'object') {
//...
}
});
return copyObject;
}