如果数组中的任何一项为true或false,如何获取布尔值



我有这个数组,它是用户生成的,随着时间的推移而变化:

const data = [["2020-09-14","15:00","60","Info","April Tucker","Other","yes"],
["2020-09-14","2:00","50","Text","April Tucker","Other","yes"]]

用户选择保存到会话存储的日期(例如:2020-11-21(:sessionStorage.getItem('date')

然后我使用forEach方法来知道数组项的第一个项是否具有相同的值:

const checkForConflicts = () => {
mydata.forEach((element) => {
element.includes(sessionStorage.getItem('date'))
})
}

如果我控制台日志,我得到数组中所有项的布尔值。如何只返回一个布尔值,如果checkForConflict只返回false值,则返回true,如果返回alt至少一个true值,则为false。

可能是Array.prototype.everyArray.prototype.some中的一个,甚至两者都会为您带来合适的工具。

简化示例代码。。。

const data = [
["2020-09-14","15:00","60","Info","April Tucker","Other","yes"],
["2020-09-14","2:00","50","Text","April Tucker","Other","yes"]
];
console.log(
'data.every(item => item[0] === "2020-09-14") ? ',
data.every(item => item[0] === "2020-09-14")
);
console.log(
'data.some(item => item[0] === "2020-09-14") ? ',
data.some(item => item[0] === "2020-09-14")
);
data.push(
["2020-09-15","2:00","50","Text","April Tucker","Other","yes"]
);
console.log(
'data.every(item => item[0] === "2020-09-14") ? ',
data.every(item => item[0] === "2020-09-14")
);
console.log(
'data.some(item => item[0] === "2020-09-14") ? ',
data.some(item => item[0] === "2020-09-14")
);
.as-console-wrapper { min-height: 100%!important; top: 0; }

尝试some((方法:

const checkForConflicts = () => {
mydata.forEach((element) => {
element.some(!sessionStorage.getItem('date'))
})
}

好吧,你不需要在数据上使用forEach和循环你可以找到冲突项目的索引-1意味着它们没有冲突

const checkForConflicts = () => {
return data.findIndex((element) => {
element.includes(sessionStorage.getItem('date'))
}) !== -1;
}

最重要的是,您必须在函数中返回值。

我建议使用一个对象数组,如果不是,请修改此代码以查看数组中的第一个元素。注意,我用一个local代替了我的测试,以一种简单的方式在这里显示它,而不是sessionStorage

const data = [{
date: "2020-09-14",
time: "15:00",
somenumber: "60",
cheers: "Info",
name: "April Tucker",
"note": "Other",
says: "yes"
},
{
date: "2020-09-14",
time: "15:00",
somenumber: "60",
cheers: "Info",
name: "Fred Tucker",
"note": "Other",
says: "yes"
},
{
date: "2020-09-13",
time: "2:00",
somenumber: "50",
cheers: "Text",
name: "April Tucker",
"note": "Other",
says: "yes"
}
];
let testdate = "2020-09-14";
let testdate2 = "2020-09-19";
const checkForConflicts = (item, testme) => {
// compare as dates to forgive formatting etc.
return (new Date(item).getTime() === new Date(testme).getTime())
};
// I used .filter in case you need to know how many conflicts but .some() might work also
let hasConflict = !!data.filter(x => checkForConflicts(x.date, testdate)).length;
console.log(hasConflict);
let conflictCount = data.filter(x => checkForConflicts(x.date, testdate)).length;
console.log(conflictCount);
let hasConflict2 = !!data.filter(x => checkForConflicts(x.date, testdate2)).length;
console.log(hasConflict2);

最新更新