如何用filter或者别的方法实现多条件过滤

{"datalist": 
    [
      {
        "color": "#E24E0D",
        "data": {
          "kehu": {
            "data1": "北京"
          },
          "xiaoqu": {
            "data1": "30个"
          },
          "jiaoshi": {
            "data1": "113个"
          },
          "tian": {
            "data1": "89天",
            "data2": "2月20日-5月19日"
          },
          "ke": {
            "data1": "3.66万节",
            "data2": "27万"
          }
        }
      },
      {
        "color": "#01AFEF",
        "data": {
          "kehu": {
            "data1": "国际"
          },
          "xiaoqu": {
            "data1": "1个"
          },
          "jiaoshi": {
            "data1": "44个"
          },
          "tian": {
            "data1": "89天",
            "data2": "2月20日-5月19日"
          },
          "ke": {
            "data1": "1173节",
            "data2": "1558"
          }
        }
      }
    ]
}
        
        let arr=['北京','44个']
        上边json如何按arr的多个条件进行过滤
阅读 3.5k
2 个回答

写sql的时候,你也需要写上 对什么字段过过滤什么值。

你上面那个只不过是json格式的数据而已,同样遵从此理。

你的过滤条件也应该是个json格式

param = {"kehu":"北京", "xiaoqu":"44个"}

再做个循环嵌套过滤

datas = json["datalist"]
for(var o in datas){
    for(var p in params){
        if(o==p && datas[o]["data1"]==params[p]){
            //do something
        }
    }
}

下面会有 data1 和 data2 这样的情况,也请提前做好约束。
例如 params 可以这样写:

params = {"kehu-data1":"北京", "xiaoqu-data2":"44个"}

那么在下面进行遍历时,请对params的key做特殊处理

datas = json["datalist"]
for(var o in datas){
    for(var p in params){
        keys = p.spilt("-");
        if(o==keys[0] && datas[o][kyes[1]]==params[o]){
            //do something
        }
    }
}

补充filter代码:

params = {"kehu": "北京", "jiaoshi":"113个"}

var ans = datalist.filter(function(item, index, array){
    var f = true
    for(var k in params){
        if(item["data"][k]["data1"]!=params[k]){
            f = false
            break;
        }
    }
    return f
})
const data = {
    "kehu": {
        "data1": "北京"
    },
    "xiaoqu": {
        "data1": "30个"
    },
    "jiaoshi": {
        "data1": "113个"
    },
    "tian": {
        "data1": "89天",
        "data2": "2月20日-5月19日"
    },
    "ke": {
        "data1": "3.66万节",
        "data2": "27万"
    }

}
let arr = ['北京', '44个']

const deal = (object, arr) => {
    const obj = {} // 输出的对象
    for (const key in object) {
    // 遍历data对象
        if (object.hasOwnProperty(key)) {
            const element = object[key];
            // 遍历data的单个属性
            for (const k in element) {
                if (element.hasOwnProperty(k)) {
                    const e = element[k];
                    // 如果arr包含这个属性就把data的属性赋值给obj
                    if (arr.includes(e)) {
                        obj[key] = element
                    }

                }
            }

        }
    }
    return obj
}
console.log(deal(data,arr))
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题