我有这个数组,我想查看里面完成工作的日子。(在本例中是星期一)
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?
答案 0 :(得分:1)
检查哪一天已完成'在所有三个对象中,你需要查看它们并构建一个每天都会给你真或假的地图。你可以这样做:
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
被忽略。那是你之后的事吗?
答案 1 :(得分:0)
首先,正如我在评论中所说,event.job
是一个数组,因此=== 'done'
永远不会评估为真。
您需要在数组上应用.every()过滤器,而不是===
。
const freeTime = done.filter((event) => event.job.every(isDone) )
function isDone(status){
return status == "done";
}
这当然是假设工作中的所有三个值都必须完成'。
如果这些对象的结构是以天为单位的每个值对应于作业中的每个值(即,将索引0(以天为单位)分配给作业的索引0),则需要更有效地设计对象。目前的设计效率不高也不实用。
答案 2 :(得分:0)
这是一种功能性的方法。有点复杂,但它完成了工作。
import Data.List
count n ys = length (intersect ys (ele n))