[英]How to filter an array inside of an array of objects?
我有這個數組,我想檢查內部完成工作的日期(在這種情況下為星期一)
const done = [
{days:["Monday", "Tuesday", "Friday"] ,job: ["done", "not yet", "done"]},
{days:["Monday", "Tuesday", "Friday"] ,job: ["done", "done", "done"]},
{days:["Monday", "Tuesday", "Friday"] ,job: ["done", "not yet", "not yet"]},
]
const freeTime = done
.filter((event) => event.job === 'done')
console.log(freeTime) // I get nothing here?
要檢查所有三個對象中的哪一天是“完成”,您需要查看所有對象並構建一張地圖,該地圖將為您提供每一天的真假。 您可以這樣做:
const done = [ {days:["Monday", "Tuesday", "Friday"] ,job: ["done", "not yet", "done"]}, {days:["Monday", "Tuesday", "Friday"] ,job: ["done", "done", "done"]}, {days:["Monday", "Tuesday", "Friday"] ,job: ["done", "not yet", "not yet"]}, ] var map = done.reduce((a, c ) => { c.days.forEach((day, i) => { a[day] = ((a[day] == undefined || a[day] ) && c.job[i] === "done") || false }) return a }, {}) console.log(map)
這將導致每天對true
或false
否定表示。 那是你追求的嗎?
首先,正如我在評論中所說, event.job
是一個數組,所以=== 'done'
將永遠不會為真。
您需要在數組上應用.every()過濾器,而不是===
。
const freeTime = done.filter((event) => event.job.every(isDone) )
function isDone(status){
return status == "done";
}
當然,這是假設Jobs屬性中的所有三個值都必須“完成”。
如果這些對象的結構是,以天為單位的每個值對應於作業中的每個值(即,以天為單位的索引0分配給作業的索引0),那么您需要更有效地設計對象。 目前的設計效率不高,也不實用。
這是一種實用的方法。 有點令人費解,但是可以完成工作。
const done = [ {days:["Monday", "Tuesday", "Friday"] ,job: ["done", "not yet", "done"]}, {days:["Monday", "Tuesday", "Friday"] ,job: ["done", "done", "done"]}, {days:["Monday", "Tuesday", "Friday"] ,job: ["done", "not yet", "not yet"]}, ] // Keep days that occur done in all "weeks" const numWeeks = done.length; // Loop through all weeks and days to see when they are "done" const daysObj = done.map((x) => x.job.map((x) => x == "done") .map((y, index) => y ? x.days[index] : "")) .map((x) => x.filter((day) => day)) .reduce((acc, curr) => acc.concat(curr)) .reduce(function(p, c){ if (c in p) { p[c]++; } else { p[c]=1; } return p; }, {}); console.log(daysObj); // {Monday: 3, Friday: 2, Tuesday: 1} // Find days that occur done in all weeks const result = Object.keys(daysObj) .map((x) => daysObj[x] == numWeeks ? x : null) .filter((x) => x) console.log(result); // ["Monday"]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.