[英]How to filter array of object based on another array values using javascript?
[英]how to filter an array based on dynamic values in javascript
我想根據動態值(名稱和部分)過濾下面給出的數組。
var allResponse = [
{
"name": "ABC",
"class": "8",
"section": "A",
},
{
"name": "DEF",
"class": "7",
"section": "B",
},
{
"name": "ABC",
"class": "8",
"section": "D",
},
]
name 和 section 的這些值,我正在單擊復選框。 基於這些值,我想過濾這個給定的數組allResponse 。 值可以是多個,例如:過濾名稱為 ABC 且部分為 A 和 D的數組,
就像在獲得價值之后,我嘗試創建一個對象來過濾,如下面給出的那樣進行迭代過濾。 但是做不到
var filterLiterals= [{"name": "ABC"},{"section": "A"},{"section": "D"}];
or
var filterLiterals= ["ABC","A","D"];
所以結果應該是
{
"name": "ABC",
"class": "8",
"section": "A",
},
我很困惑應該遵循哪種方法來獲得結果。
我嘗試使用 || 和 && 運算符,但無法得到我想要的結果。
任何人都可以建議我采用合適和正確的方法來過濾這個數組。 我做不到。
是否可以以任何方式在javascript中以這種方式過濾......?
您可以創建一個接受名稱和部分數組的函數。 在函數內部使用filter
並在回調函數中返回名稱匹配且該section
包含在傳遞給該函數的部分數組中的那些對象
var allResponse = [{ "name": "ABC", "class": "8", "section": "A", }, { "name": "DEF", "class": "7", "section": "B", }, { "name": "ABC", "class": "8", "section": "D", } ] function filterArray(name, sectionArray) { return allResponse.filter(function(elem) { return elem.name = name && sectionArray.includes(elem.section) }) }; console.log(filterArray('ABC', ['A', 'D']))
如果我正確閱讀了您的問題,您希望根據您點擊的內容過濾您的數據。
var allResponse = [ { "name": "ABC", "class": "8", "section": "A", }, { "name": "DEF", "class": "7", "section": "B", }, { "name": "ABC", "class": "8", "section": "D", }, ]; var clickedValue = "ABC"; var filteredResponse = allResponse.filter( function(response) { return response.name === clickedValue }); console.log(filteredResponse);
我認為這應該可以解決您的過濾問題。
根據我的理解,我需要在下面找到滿足的元素,
名稱:ABC 部分:A 或 D
var allResponse = [ { "name": "ABC", "class": "8", "section": "A", }, { "name": "DEF", "class": "7", "section": "B", }, { "name": "ABC", "class": "8", "section": "D", }, ]; var filterLiterals = [ {"name": "ABC"}, {"section": "A"}, {"section": "D"} ]; const parsed = filterLiterals.reduce((acc, obj) => { const key = Object.keys(obj)[0]; if (typeof acc[key] === 'undefined') acc[key] = [obj[key]]; else acc[key].push(obj[key]); return acc; }, {}); //console.log("parsed: ", parsed); var answer = allResponse.filter(obj => { let flag = true; for (const key of Object.keys(parsed)) { if (!parsed[key].includes(obj[key])) { flag = false; break; } } return flag; }); console.log(answer);
運行這個!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.