let arr = [
{
"水电": 226,
"直接人工": 604,
"折旧费": 11,
"维度": "2021\n贵阳联塑\n配件车间\n"
},
{
"水电": 5,
"直接人工": 733,
"折旧费": 115,
"维度": "2021\n贵阳联塑\n管材车间\n"
},
{
"水电": 501,
"直接人工": 378,
"折旧费": 71,
"维度": "2021\n武汉联塑\n配件车间\n"
},
{
"水电": 345,
"直接人工": 864,
"折旧费": 92,
"维度": "2021\n武汉联塑\n管材车间\n"
},
{
"水电": 169,
"直接人工": 958,
"折旧费": 59,
"维度": "2021\n广东科技\n配件车间\n"
},
{
"水电": 775,
"直接人工": 404,
"折旧费": 73,
"维度": "2021\n广东科技\n管材车间\n"
},
{
"水电": 62,
"直接人工": 210,
"折旧费": 125,
"维度": "2020\n贵阳联塑\n配件车间\n"
},
{
"水电": 127,
"直接人工": 831,
"折旧费": 57,
"维度": "2020\n贵阳联塑\n管材车间\n"
},
{
"水电": 480,
"直接人工": 22,
"折旧费": 8,
"维度": "2020\n武汉联塑\n配件车间\n"
},
{
"水电": 754,
"直接人工": 411,
"折旧费": 67,
"维度": "2020\n武汉联塑\n管材车间\n"
},
{
"水电": 238,
"直接人工": 927,
"折旧费": 193,
"维度": "2020\n广东科技\n配件车间\n"
},
{
"水电": 509,
"直接人工": 571,
"折旧费": 200,
"维度": "2020\n广东科技\n管材车间\n"
},
{
"水电": 230,
"直接人工": 617,
"折旧费": 32,
"维度": "2022\n贵阳联塑\n配件车间\n"
},
{
"水电": 795,
"直接人工": 639,
"折旧费": 152,
"维度": "2022\n贵阳联塑\n管材车间\n"
},
{
"水电": 371,
"直接人工": 373,
"折旧费": 104,
"维度": "2022\n武汉联塑\n配件车间\n"
},
{
"水电": 509,
"直接人工": 324,
"折旧费": 2,
"维度": "2022\n武汉联塑\n管材车间\n"
},
{
"水电": 331,
"直接人工": 938,
"折旧费": 46,
"维度": "2022\n广东科技\n配件车间\n"
},
{
"水电": 20,
"直接人工": 218,
"折旧费": 157,
"维度": "2022\n广东科技\n管材车间\n"
},
{
"水电": 2,
"直接人工": 48,
"折旧费": 110,
"维度": "2024\n贵阳联塑\n配件车间\n"
},
{
"水电": 310,
"直接人工": 372,
"折旧费": 4,
"维度": "2024\n贵阳联塑\n管材车间\n"
},
{
"水电": 592,
"直接人工": 894,
"折旧费": 84,
"维度": "2024\n武汉联塑\n配件车间\n"
},
{
"水电": 710,
"直接人工": 358,
"折旧费": 90,
"维度": "2024\n武汉联塑\n管材车间\n"
},
{
"水电": 53,
"直接人工": 74,
"折旧费": 133,
"维度": "2024\n广东科技\n配件车间\n"
},
{
"水电": 455,
"直接人工": 620,
"折旧费": 60,
"维度": "2024\n广东科技\n管材车间\n"
}
]
let compareMap = {
'>': (name, value) => {
return `e['${name}'] > ${value}`
},
'<': (name, value) => {
return `e['${name}'] < ${value}`
},
'==': (name, value) => {
return `e['${name}'] === ${value}`
},
'!=': (name, value) => {
return `e['${name}'] !== ${value}`
},
'<=': (name, value) => {
return `e['${name}'] <= ${value}`
},
'>=': (name, value) => {
return `e['${name}'] >= ${value}`
}
}
const criteria = {
"dimension": {
"或": [
{
"fieldType": "dimension",
"radio": 2,
"id": "workshop",
"name": "车间",
"assert": "或",
"criteriaArr": [
{
"name": "车间",
"compare": "==",
"value": "配件车间"
}
]
},
{
"fieldType": "dimension",
"radio": 2,
"id": "werks",
"name": "工厂",
"assert": "或",
"criteriaArr": [
{
"name": "工厂",
"compare": "==",
"value": "广东科技"
},
{
"name": "工厂",
"compare": "==",
"value": "贵阳联塑"
}
]
},
{
"fieldType": "dimension",
"radio": 2,
"id": "zyear",
"name": "年度",
"assert": "或",
"criteriaArr": [
{
"name": "年度",
"compare": "==",
"value": "2020"
},
{
"name": "年度",
"compare": "==",
"value": "2021"
}
]
}
]
},
"quota": {
"或": [
{
"fieldType": "quota",
"radio": 2,
"id": "water",
"name": "水电",
"assert": "或",
"criteriaArr": [
{
"name": "水电",
"compare": ">",
"value": "200"
},
{
"name": "水电",
"compare": "<",
"value": "100"
}
]
}
],
// "与": [
// {
// "fieldType": "quota",
// "radio": 2,
// "id": "money",
// "name": "直接人工",
// "assert": "与",
// "criteriaArr": [
// {
// "name": "直接人工",
// "compare": ">",
// "value": "500"
// },
// {
// "name": "直接人工",
// "compare": "<",
// "value": "1000"
// }
// ]
// },
// {
// "fieldType": "quota",
// "radio": 2,
// "id": "zhejiu",
// "name": "折旧费",
// "assert": "与",
// "criteriaArr": [
// // {
// // "name": "折旧费",
// // "compare": ">",
// // "value": "100"
// // },
// {
// "name": "折旧费",
// "compare": "<",
// "value": "200"
// }
// ]
// }
// ]
}
}
let arr2 = []
function generateStr(criteria) {
let typeArr = []
let res = ''
for (const k in criteria) {
if (k === 'dimension') {
for (const ck in criteria[k]) {
let str = ''
if (ck === '或') {
let ckArr = []
criteria[k][ck].forEach(dimen => {
let arr = dimen.criteriaArr.map(item => { return `e['维度'].includes('${item.value}')` })
let arrStr = arr.join('||')
ckArr.push(arrStr)
})
ckArr = ckArr.map(e => { return `(${e})` })
str += ckArr.join('&&')
typeArr.push(str)
}
}
}
if (k === 'quota') {
for (const ck in criteria[k]) {
let str = ''
if (ck === '或') {
let ckArr = []
criteria[k][ck].forEach(quota => {
let arr = quota.criteriaArr.map(item => { return compareMap[item.compare](item.name, item.value) })
let arrStr = arr.join('||')
ckArr.push(arrStr)
})
ckArr = ckArr.map(e => { return `(${e})` })
str += ckArr.join('&&')
typeArr.push(str)
}
if (ck === '与') {
let ckArr = []
criteria[k][ck].forEach(quota => {
let arr = quota.criteriaArr.map(item => { return compareMap[item.compare](item.name, item.value) })
let arrStr = arr.join('&&')
ckArr.push(arrStr)
})
ckArr = ckArr.map(e => { return `(${e})` })
console.log(ckArr)
str += ckArr.join('&&')
typeArr.push(str)
}
}
}
}
console.log(typeArr)
res = typeArr.join('&&')
return res
}
let str = generateStr(criteria)
const res = arr.filter((e => {
return eval(str)
}))
console.log(res)
console