对象数组里多条数据合并关联获取判断结果
js 存在数组对象a1属性名称,a2要判断的值,a3判断条件,a4多条之间的关联符号
[{a1:'name',a2:'张三',a3:'=',a4:'&&'},
{a1:'name1',a2:'李四',a3:'NOT IN',a4:'||'},
{a1:'name2',a2:'王五',a3:'IN',a4:''}]
希望处理返回结果:
this.value[name]=='张三' && !'李四'.includes(this.value[name1]) || '王五'.includes(this.value[name2])
最终true或者false
可以使用以下JavaScript代码来处理给定的数组对象:
let arr = [{a1:'name',a2:'张三',a3:'=',a4:'&&'},{a1:'name1',a2:'李四',a3:'NOT IN',a4:'||'},{a1:'name2',a2:'王五',a3:'IN',a4:''}];
let result = arr.map(obj => {
if(obj.a3 == '=') {
return this.value[obj.a1] == obj.a2;
} else if(obj.a3 == 'IN') {
return obj.a2.includes(this.value[obj.a1]);
} else if(obj.a3 == 'NOT IN') {
return ! obj.a2.includes(this.value[obj.a1]);
}
}).join(` ${arr[0].a4} `);
console.log(eval(result));
存在问题:join(${arr[0].a4}
)拿不到每一项的连接符,继续调整
let result = "";
for (let obj of arr) {
let conditionResult;
if (obj.a3 == '=') {
conditionResult = this.value[obj.a1] == obj.a2;
} else if (obj.a3 == 'IN') {
const arr = obj.a2.split(",");
conditionResult = arr.includes(this.value[obj.a1]);
} else if (obj.a3 == 'NOT IN') {
const arr = obj.a2.split(",");
conditionResult = !arr.includes(this.value[obj.a1]);
}
if (result == "") {
result = conditionResult+""+ (obj.a4 ? obj.a4 : '');
} else {
result += conditionResult+""+ (obj.a4 ? obj.a4 : '');
}
}
console.log(result);
console.log(eval(result));
这段代码会根据数组对象中的条件构建逻辑表达式,并使用eval()函数计算最终的结果。请注意,使用eval()函数需要谨慎,因为它会执行传入的字符串作为JavaScript代码