Problem

**The task** is taken from LeetCode

Given an array of meeting time intervals consisting of start and end times`[[s1,e1],[s2,e2],...]`

`(si < ei)`

, determine if a person could

attend all meetings.

Example 1:

`Input: [[0,30],[5,10],[15,20]] Output: false`

Example 2:

`Input: [[7,10],[2,4]] Output: true`

**My imperative solution:**

```
/**
* @param {number[][]} intervals
* @return {boolean}
*/
var canAttendMeetings = function(intervals) {
intervals.sort((a,b) => a[0] - b[0]);
for (let i = 1; i < intervals.length; i++) {
if (intervals[i][0] < intervals[i - 1][1]) { return false; }
}
return true;
};
```

**My functional solution:**

```
/**
* @param {number[][]} intervals
* @return {boolean}
*/
var canAttendMeetings = function(intervals) {
return intervals
.sort((a,b) => a[0] - b[0])
.flat()
.every((x,i, src) => i % 2 === 0 || src[i + 1] === void 0 || src[i] < src[i + 1]);
};
```

Solution

These two functions look quite sufficient to solve the task. I will say that the functional solution will likely be slower, not only because it is functional but also because of the call to `.flat()`

and iterating over twice as many elements.

Correct me if this is incorrect, but the call to `.flat()`

could be removed if the call to `.every()`

was changed to a condition similar to the condition in the imperative solution:

```
.every((x,i, src) => i === 0 || !(src[i][0] < src[i - 1][1]));
```