摘要:
感謝閱讀!我被困在試圖弄清楚如何將多個變數(未知數量)傳遞到一個引數中,該引數包含一個物件陣列(未知數量)簡而言之:我想過濾掉那些不匹配的人從另一個陣列中列出的標準(我也愿意使用 rest 而不是陣列)。
代碼訪問:
codePen:(一團糟)https://codepen.io/gold240sx/pen/NWXJKLv?editors=0011
我發現有助于獲取鍵值對的附加代碼:https ://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/entries
對于這個問題,我正在使用來自以下網址的現有示例: https ://sebhastian.com/javascript-filter-array-multiple-values/ :
let filters = people.filter (function (currentElement) {
return currentElement.country === "America" && currentElement.age < 25;
});
console.log(filteredPeople);
這太棒了,除非它假設我已經知道我正在尋求過濾的引數以及我正在尋找相關引數的元素。
// 物件陣列:
let people = [
{name: "Steve", age: 27, country: "America"},
{name: "Linda", age: 23, country: "Germany"},
{name: "Jimena", age: 29, country: "Spain"},
{name: "Eric", age: 24, country: "England"},
{name: "Jacob", age: 24, country: "America"},
];
let filters = [
{country: "America"},
{Age: 24}
];
// 功能:(嘗試)
const filterMatch = {}
const filterThePeople = ((data, filters) => {
filters.forEach(filter => {
//==========get key and value of filter=====================
for (const [key, value] of Object.entries(filter)) {
filterMatch[key] = value
return {key, value}
}
})
data.forEach(person => {
for (const [key2, value2] of Object.entries(data)) {
return {key2, value2}
}
})
})
console.log(filterThePeople(people, filters))
我不確定是否將“data.forEach ...”陳述句放在上面的 for 陳述句中......我正在考慮放置一個 if 或 switch 陳述句來查看每個鍵的陣列以及何時找到匹配鍵,然后它將查看每個鍵的值,如果鍵和值都匹配,則 = 到串列...最終將串列回傳給函式。(至少這是我在腦海中想象的解決方案。我完全愿意接受任何和所有實作這一目標的替代方法!)
uj5u.com熱心網友回復:
過濾匹配每個過濾器的人.. 我可能會補充一點,KEY 的命名在這里非常重要。在您的示例中,您Age稍后將其作為資本。這也允許您像這樣構建過濾器:
let filters = [ {country: "America", age: 24} ];
let people = [ { name: "Steve", age: 27, country: "America", }, { name: "Linda", age: 23, country: "Germany", }, { name: "Jimena", age: 29, country: "Spain", }, { name: "Eric", age: 24, country: "England", }, { name: "Jacob", age: 24, country: "America", }, ];
let filters = [
{country: "America"},
{age: 24}
];
let results = people.filter(p =>
filters.every(f=> Object.keys(f).every(k => p[k] === f[k]))
)
console.log(results);
uj5u.com熱心網友回復:
你可以做這樣的事情
let people = [
{name: "Steve", age: 27, country: "America"},
{name: "Linda", age: 23, country: "Germany"},
{name: "Jimena", age: 29, country: "Spain"},
{name: "Eric", age: 24, country: "England"},
{name: "Jacob", age: 24, country: "America"},
];
let filters = [
{country: "America"},
{age: 24}
];
const filtered = people.filter(p => filters.every(f => {
const [key] = Object.keys(f)
return p[key] === f[key]
}))
console.log(filtered)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/459141.html
標籤:javascript 数组 ecmascript-6 筛选 传播
