【问题标题】:generate New set of Array patterns from loop in javascript从javascript中的循环生成一组新的数组模式
【发布时间】:2020-10-09 07:03:39
【问题描述】:

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

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"]
]

我需要帮助来解决这个问题,这两天一直在工作这个模块,谁能解决我的问题,将不胜感激

(注意:过滤器数组是根据用户输入动态生成的)

【问题讨论】:

    标签: javascript loops object arraylist


    【解决方案1】:

    这样做的一种方法是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)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-03
      • 2019-12-10
      • 2012-02-24
      • 2011-09-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多