检查对象中的值是否在对象的其他值(属性)之间,并且该对象在数组中

问题描述 投票:1回答:1

我想检查对象数组中的对象之间是否有一个值。目的是尝试查看开始和结束unix时间是否在其他时间段之间。这提供了一种更简单的问题提问方式

期望:

下面的代码应返回true,因为值79不在值的任何对象中。

[newStart = 4newEnd = 5之类的值应返回false

[newStart = 5newEnd = 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
javascript arrays multidimensional-array
1个回答
0
投票

您的代码按应有的方式工作。如果我们考虑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
© www.soinside.com 2019 - 2024. All rights reserved.