【发布时间】:2018-02-13 16:42:01
【问题描述】:
我有一个与位置相关的数据,它来自不同的 api,需要用于根据位置选择过滤另一组数据。
let locationData= [
{
"Name": "Olympics",
"Problem Type": "Access",
"LS_ID": "421"
},
{
"Name": "Olympics",
"Problem Type": "Route Issue",
"LS_ID": "420"
},
{
"Name": "Olympics",
"Problem Type": "Tools",
"LS_ID": "420"
},
{
"Name": "Olympics",
"Problem Type": "Access",
"LS_ID": "420"
},
{
"Name": "Olympics",
"Problem Type": "Tools",
"LS_ID": "422"
}
]
需要过滤的主数据是
let mainData=
[
{
"SiteType": "Outdoor",
"ID": "421",
"Name": "Olympics"
},
{
"SiteType": "Indoor",
"ID": "420",
"Name": "Olympics"
},
{
"SiteType": "International",
"ID": "422",
"Name": "Olympics"
},
{
"SiteType": "Local",
"ID": "423",
"Name": "Olympics"
}
]
我们有一个多选字段,我们将在其中选择'问题类型'选项(例如:Access、Tools、No Entry、Route Issue等) p>
所以在选择时,我们会得到像 ['Access','Tools']
这样的字符串数组要求是显示同时具有 ('Access' AND 'Tools') 问题类型的 SiteType,即;从上面的例子中
如果输入是
let selections=['Access','Tools']
预期输出是
{
"SiteType": "Indoor",
"ID": "420",
"Name": "Olympics"
}
因为 LS_ID="420" 有两种问题类型。
我试图在 locationData 上迭代选定的值以获取 LS_ID 比较,但是,我得到了所有具有选定值的 LS-ID ('OR' 条件) 而不是获取具有所有选定值的 LS_ID **('AND' 条件)**
export function filterWithIssueSelectedValue(mainData,selections,locationData){
let siteIds=[], filteredSSData=[]
locationData.map((row,index)=>{
selections.map((issue)=>{
if(_.includes(row["Problem Type"], issue)){
siteIds.push(row.LS_ID)
}
})
})
siteIds=_.uniq(siteIds);
if(siteIds && siteIds.length){
mainData.map((row,index)=>{
siteIds.map((id)=>{
if(row.ID==id){
filteredSSData.push(row)
}
})
})
}
filteredSSData=_.uniqBy(filteredSSData, 'ID')
return filteredSSData
}
有人可以帮我过滤一下吗。谢谢提前!!
【问题讨论】:
标签: javascript jquery arrays filter