簡體   English   中英

如何根據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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM