遇到一种业务场景 记录一下
当遇到复杂入餐结构体时 可以通过eval进行动态变量声明 当然也可以进行javascript代码 但是这种执行方式不安全
代码处理部分
const CONST_NAME = [
{name:'FACE',pic:'facePicMap',struct:'faceStructMap'},
{name:'HUMAN',pic:'humanPicMap',struct:'humanStructMap'},
{name:'VEHICLE',pic:'vehiclePicMap',struct:'fvehicleStructMap'},
{name:'VEHICLE2',pic:'vehicle2PicMap',struct:'fvehicle2StructMap'},
{name:'VEHICLE3',pic:'vehicle3PicMap',struct:'vehicle3StructMap'},
];
for(let i = 0;i < this.CONST_NAME.length - 1;i++){
eval(`${CONST_NAME[i].pic} = {}`)
eval(`${CONST_NAME[i].struct} = {}`)
} ;
let obj = {};
XXX.foEach(lev1=>{
lev1.Arr.forEach(lev2=>{
const {pic,struct} = CONST_NAME.find(item=>item.name === lev2.value)
if(xxx){
// 传入对象是json形式的 否则会报错!!! 同理赋值为一个字符串 也需要在模板拼接中
// 声明出对象的类型 ex:eval(`${pic}[${uuid}] = '123'(字符串) || 123(数字)`)
eval(`${pic}[${uuid}] = ${JSON.stringify({
xxx:'20',
...
})}`)
obj[pic] = eval(pic)
}else{
eval(`${struct}[${uuid}] = ${JSON.stringify({
id:'',
...xxx
})}`)
obj[struct] =eval(struct)
}
})
})
console.log(obj)
评论 (0)