从 javascript 中的循环生成新的数组模式集



嗨,我有一个对象数据类型,我需要从中生成新的数组模式来过滤操作,但不知何故我无法从下面的代码中达到预期的输出模式,dono我缺少逻辑的地方

sample code
filterArray = {floor:["floor1","floor2","floor3"],age:[26,23,24],dept:["IT"]}
var filter = [];
var groupArray = [];
for(var key in filterArray){
var keys = filterArray[key];
for (value in keys){
if (keys.length > 1){
groupArray.push([key, "=",keys[value]]);
groupArray.push("or");
}else{
if (filter.length > 0){
filter.pop()
filter.push("and")
filter.push([key, "=",keys[value]]);
filter.push("and");  
}else{
filter.push([key, "=",keys[value]]);
filter.push("and");  
}
}
}
}
filter.pop()
groupArray.pop()
if (groupArray.length > 0){
filter.push(groupArray);
}

我的示例输出

[
[
["floor", "=", "floor1"],
"or",
["floor", "=", "floor2"],
"or",
["floor", "=", "floor3"],
"or",
["age", "=", "26"],
"or",
["age", "=", "23"],
"or",
["age", "=", "24"]
],
"and",
[ "dept", "=", "IT"]
]

但我的预期输出是

[
[
["floor", "=", "floor1"],
"or",
["floor", "=", "floor2"],
"or",
["floor", "=", "floor3"]
],
"and",
[
["age", "=", "26"],
"or",
["age", "=", "23"],
"or",
["age", "=", "24"]
],
"and",
[ "dept", "=", "IT"]
]

我需要帮助来解决这个问题,过去两天一直在工作这个模块,任何人都可以解决我的问题,将不胜感激

(注意:该过滤器数组是根据用户输入动态排列的(

一种方法是先map键,然后对象的值以生成条件的嵌套数组,然后根据需要使用splice插入orand

let filterArray = {
floor: ["floor1", "floor2", "floor3"],
age: [26, 23, 24],
dept: ["IT"]
}
let filter = Object.keys(filterArray).map(key => {
let ors = filterArray[key].map(v => [key, '=', v]);
let len = ors.length;
for (let i = 1; i < len; i++) {
ors.splice(2 * i - 1, 0, 'or');
}
return ors;
});
let len = filter.length;
for (let i = 1; i < len; i++) {
filter.splice(2 * i - 1, 0, 'and');
}
console.log(filter)

最新更新