Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/473.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript-如何在一定条件下获取数组值?_Javascript - Fatal编程技术网

JavaScript-如何在一定条件下获取数组值?

JavaScript-如何在一定条件下获取数组值?,javascript,Javascript,我想过滤let data数组。我创建了带有过滤let数据数组值条件的map函数,以获得结果[“真”、“假”、“真”],但我还希望在结果为真时显示let数据数组值 这是我的密码: let data = { "days": { "Monday": { "checkin": "23:00", "checkout": "

我想过滤let data数组。我创建了带有过滤let数据数组值条件的map函数,以获得结果[“真”、“假”、“真”],但我还希望在结果为真时显示let数据数组值

这是我的密码:

 let data = 
{
    "days": {
        "Monday": {
            "checkin": "23:00",
            "checkout": "10:00"
        },
        "Tuesday": {
            "checkin": "07:00",
            "checkout": "14:00"
        },
        "Wednesdy": {
            "checkin": "07:00",
            "checkout": "04:00"
        },
    }
}
let day = ['Monday','Tuesday','Wednesdy'];
const ds = Object.keys(data.days);

const getin = (day) =day.map (d=> ds.indexOf(d)>=0 && data.days[d].checkin >= data.days[d].checkout); 


console.log("===Results===",getin);

当过滤条件为真时,您可以通过在新数组中推送对象来执行以下操作

let数据=
{
“天”:{
“星期一”:{
“签入”:“23:00”,
“结帐”:“10:00”
},
“星期二”:{
“签入”:“07:00”,
“结帐”:“14:00”
},
“星期三”:{
“签入”:“07:00”,
“结帐”:“04:00”
},
}
}
let day=[‘星期一’、‘星期二’、‘星期三’];
const ds=Object.keys(data.days);
常数daysRes=[];
const getin=(day)=day.map(d=>{
如果(ds.indexOf(d)>=0&&data.days[d]。签入>=data.days[d]。签出){
daysRes.push(data.days[d]);
返回true;
}
返回false;
}); 
log(“==Results==”,getin);

console.log(“==ResultsDays==”,daysRes)如果我没有错,您希望
筛选
,然后返回所有项目
匹配条件

您可以与
.reduce一起使用来实现它

let数据=
{
“天”:{
“星期一”:{
“签入”:“23:00”,
“结帐”:“10:00”
},
“星期二”:{
“签入”:“07:00”,
“结帐”:“14:00”
},
“星期三”:{
“签入”:“07:00”,
“结帐”:“04:00”
},
}
}
let day=[‘星期一’、‘星期二’、‘星期三’];
var result=Object.entries(data.days).reduce((acc,[key,value])=>{
if(day.indexOf(key)>=0&&value.checkin>=value.checkout)
acc.push({[key]:value});
返回acc;
}, []); 

控制台日志(结果)我不知道为什么您会被困在这个阶段,因为它非常琐碎

在这方面:

const getin = (day) =day.map (d=> ds.indexOf(d)>=0 && data.days[d].checkin >= data.days[d].checkout);
您实际上是在分配
ds.indexOf(d)>=0&&data.days[d]。签入>=data.days[d]。签出
getin
day
的结果

ds.indexOf(d)>=0&&data.days[d]。签入>=data.days[d]。签出是一个布尔值,因为它是两个检查的输出

您可以使用类似这样的内容来使用检查,而不是返回检查本身:
ds.indexOf(d)>=0&&data.days[d]。签入>=data.days[d]。签出?d:false
<代码>?
是一个条件运算符,有助于减少键入if-else语句

修改后的代码:

 let data = 
{
    "days": {
        "Monday": {
            "checkin": "23:00",
            "checkout": "10:00"
        },
        "Tuesday": {
            "checkin": "07:00",
            "checkout": "14:00"
        },
        "Wednesdy": {
            "checkin": "07:00",
            "checkout": "04:00"
        },
    }
}
let day = ['Monday','Tuesday','Wednesdy'];
const ds = Object.keys(data.days);

const getin = (day) =day.map (d=> ds.indexOf(d)>=0 && data.days[d].checkin >= data.days[d].checkout ? d : false); 


console.log("===Results===",getin);
使用而不是

let数据={
天数:{
星期一:{
签入:“23:00”,
结帐:“10:00”
},
星期二:{
签入:“07:00”,
结帐:“14:00”
},
星期三:{
签入:“07:00”,
结帐:“04:00”
}
}
};
let day=[“周一”、“周二”、“周三”];
const ds=Object.keys(data.days);
const getin=Object.values(data.days).filter(d=>(d.checkin>=d.checkout));
log(“==Results==”,getin)