javascript - 按多个键过滤 JSON 数据
问题描述
我的 json 数据在这里
[
{
"id":"13167",
"photo_cd":"9946",
"src":"",
"price":"5990",
"hf_section":"1",
"sell_price":"6469",
"design_id":"1",
"genre_id":"1",
"color_id":"1"
},
{
"id":"13166",
"photo_cd":"9945",
"src":"",
"price":"5990",
"hf_section":"1",
"sell_price":"6469",
"design_id":"3",
"genre_id":"1",
"color_id":"1"
},
{
"id":"13165",
"photo_cd":"9944",
"src":"",
"price":"5990",
"hf_section":"1",
"sell_price":"6469",
"design_id":"1",
"genre_id":"1",
"color_id":"4"
},
{
"id":"13164",
"photo_cd":"9943",
"src":"",
"price":"6990",
"hf_section":"1",
"sell_price":"7549",
"design_id":"2",
"genre_id":"3",
"color_id":"3"
}
]
我的参数是这样的
["", "2", "1", "0", "0", "0"]
我的JS在这里
$.getJSON(
filepath,
function(data) {
var keys = [];
var values = [];
if (param[1] != 0) {
keys.push("hf_section");
values.push(param[1]);
}
if (param[2] != 0) {
keys.push("design_id");
values.push(param[2]);
}
if (param[3] != 0) {
keys.push("genre_id");
values.push(param[3]);
}
if (param[4] != 0) {
keys.push("color_id");
values.push(param[4]);
}
if (param[5] != 0) {
keys.push("price");
values.push(param[5]);
}
var result = data.filter(function(e) {
return keys.every(function(a) {
return values.includes(e[a])
})
})
})
我想用 AND 条件过滤所有参数。现在它就像 OR
解决方案
我建议使用一个对象
filter = { hf_section: '2', design_id: '1', genre_id: '0', color_id: '0', price: '0' }
与给定数据的键和过滤所需的值相对应的键。
然后您可以过滤键以仅获得想要的结果。
如果您使用数字而不是字符串进行比较,则过滤键和过滤对象可能会更容易。
var data = [{ id: "13167", photo_cd: "9946", src: "", price: "5990", hf_section: "1", sell_price: "6469", design_id: "1", genre_id: "1", color_id: "1" }, { id: "13166", photo_cd: "9945", src: "", price: "5990", hf_section: "1", sell_price: "6469", design_id: "3", genre_id: "1", color_id: "1" }, { id: "13165", photo_cd: "9944", src: "", price: "5990", hf_section: "1", sell_price: "6469", design_id: "1", genre_id: "1", color_id: "4" }, { id: "13164", photo_cd: "9943", src: "", price: "6990", hf_section: "1", sell_price: "7549", design_id: "2", genre_id: "3", color_id: "3" }],
items = ["", "2", "1", "0", "0", "0"],
filter = { hf_section: '2', design_id: '1', genre_id: '0', color_id: '0', price: '0' },
keys = Object.keys(filter).filter(k => +filter[k]),
result = data.filter(o => keys.every(k => o[k] == filter[k]));
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
推荐阅读
- stringbuilder - Apache Common 的 StrBuilder 和 Java 的 StringBuilder 有什么区别?
- model-view-controller - 如何在 KendoUI 调度程序上制作年度视图?
- angular - 如何使用primeng表格单元格添加带有无变形文本的图标结尾
- android - 从谷歌商店获取应用版本和新功能
- c# - DataTable 到 GridView 没有显示结果表
- numpy - Optimal way to find index of first occurrence of subarray in each frame of batch data without for loop
- vhdl - 将输出连接到 DAC - VHDL
- c# - 如何在 c# 中获取@rErr / 输出参数值?
- mysql - 如何在 SSMS 中加入名为“身份”的列?
- angular - 将数据从子组件传递到父组件时出错