我想检查对象数组中的对象之间是否有一个值。目的是尝试查看开始和结束unix
时间是否在其他时间段之间。这提供了一种更简单的问题提问方式
期望:
下面的代码应返回true
,因为值7
和9
不在值的任何对象中。
[newStart = 4
至newEnd = 5
之类的值应返回false
[newStart = 5
至newEnd = 11
之类的值应返回false
let newStart = 7
let newEnd = 9
const bookedValues = [{start:4,end:6},{start:10,end:12}]
const isValidStart =
bookedValues.some(booking => newStart < booking.start && newStart > booking.end)
const isValidEnd =
bookedValues.some(booking => newEnd < booking.start && newEnd > booking.end)
console.log(isValidStart) //returns false
console.log(isValidEnd) //returns false
您的代码按应有的方式工作。如果我们考虑array.some
方法
some()方法测试数组中的至少一个元素是否通过了由提供的函数实现的测试。如果一个元素确实通过,则返回
true
,否则返回false
相反,如果要考虑数组中两个项目的布尔状态,请使用array.every
方法
every()方法测试数组中的所有元素是否通过提供的函数实现的测试。如果所有元素都通过返回
true
,否则,如果仅部分元素通过或没有通过返回false
在这两种方法中,数组中的任何一个对象都不通过该函数,并且不会返回false
,因为没有变量(数字)可以同时大于或小于某个范围,因此请使用OR
运算符。因为如果数字小于范围的开始或大于范围的结束,则它不在范围内。
let newStart = 7
let newEnd = 9
let bookedValues = [{start:4,end:6},{start:10,end:12}]
let isValidStart =
bookedValues.every(booking => newStart < booking.start || newStart > booking.end)
let isValidEnd =
bookedValues.every(booking => newEnd < booking.start || newEnd > booking.end)
console.log(isValidStart) //doesn't return false
console.log(isValidEnd) //doesn't return false