我正在做一個搜索功能,用戶將在過濾器物件中輸入該選項,然后他們將獲得他們想要的串列。所以我有一個這樣的陣列
let array = [
{
"id": 1,
"form_items": [
{
"value_text": "test",
"header_id": 1,
"value_number" 2000
},
{
"value_text": "test 2",
"header_id": 2,
"value_number" null
}
]
},
{
"id": 2,
"form_items": [
{
"value_text": "test 3",
"header_id": 3,
"value_number": 1000
}
]
}
]
我有一個像這樣的過濾器物件
let filter = {
"value_text": "test 2",
"value_number": 2000
}
我如何基于我的過濾器物件回傳我的陣列,該元素在 form_items 陣列中匹配條件,例如:“header_id”中的“test 2”:2 和“header_id”中的 2000:1
所以我的結果看起來像這樣
[
{
"id": 1,
"form_items": [
{
"value_text": "test",
"header_id": 1,
"value_number" 2000
},
{
"value_text": "test 2",
"header_id": 2,
"value_number" null
}
]
}
]
uj5u.com熱心網友回復:
你可以用很少的回圈來做到這一點,但它可以放入更小的函式中。
var results = [];
for(const element of array){
// 1. Find all formItems that are matching your filter for each element
let matchingFormItems = []; // create an result array of formItems matching your filter criteria
for(const formItem of array['form_items']){ // iterate over all form_items
for(let filterKey: Object.keys(filter)){ // for each filter key, check if current formItem matches filter criteria
if(filter[filterKey] === formItem[filterKey]){ // if filter key is matching property from the formItem, push it to result Array
matchingFormItems.push(formItem);
break;// if one filter is matching, you can skip other
}
}
}
// 2. If at least one formItem has been found - push new object to the result array
if(matchingFormItems.length > 0 ){
results.push({ // it's best not to mutate input array, so we need to clone the object with only desired formItems.
'id': element.id,
'form_items': matchingFormItems
});
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/335746.html
標籤:javascript 数组 目的 筛选
