Anand Dharne
Anand Dharne

Reputation: 25

How can I avoid for loops in the below code

Index.js

(function () {
'use strict';

// This is the array the isAircraftDueForTireChange function expects. 
// Assume the following object was loaded via an API as JSON.
// This object may contain some unrealistic or duplicate data; It is only intended for testing.
window.CAMP = {
    aircraftData: [
        {
            // Should require maintenance
            id: 1,
            lastTireChange: new Date('9/1/2016'),
            manufacturer: 'FooPlane',
            landings: [
                new Date('9/1/2015'),
                new Date('9/5/2015'),
                new Date('9/12/2016'),
                new Date('9/12/2015'),
                new Date('1/1/2016'),
                new Date('10/1/2015'),
                new Date('10/23/2015'),
                new Date('9/12/2016'),
                new Date('10/28/2015'),
                new Date('11/15/2015'),
                new Date('12/22/2015'),
                new Date('12/22/2015'),
                new Date('12/27/2015'),
                new Date('1/7/2016'),
                new Date('2/1/2016'),
                new Date('2/1/2016'),
                new Date('2/1/2016'),
                new Date('2/1/2016'),
                new Date('9/23/2016'),
                new Date('2/1/2016'),
                new Date('9/23/2016'),
                new Date('9/12/2016'),
                new Date('9/1/2016'),
                new Date('9/2/2016'),
                new Date('9/2/2016'),
                new Date('9/23/2016'),
                new Date('9/2/2016'),
                new Date('9/2/2016'),
                new Date('9/2/2016'),
                new Date('9/5/2016'),
                new Date('9/5/2016'),
                new Date('9/5/2016'),
                new Date('9/5/2016'),
                new Date('9/5/2016'),
                new Date('9/5/2016'),
                new Date('9/2/2016'),
                new Date('9/2/2016'),
                new Date('9/23/2016'),
                new Date('9/2/2016'),
                new Date('9/2/2016'),
                new Date('9/23/2016'),
                new Date('9/2/2016'),
                new Date('9/2/2016'),
                new Date('9/2/2016'),
                new Date('9/2/2016'),
                new Date('9/2/2016'),
                new Date('9/2/2016'),
                new Date('9/2/2016'),
                new Date('9/12/2016'),
                new Date('9/2/2016'),
                new Date('9/2/2016'),
                new Date('9/2/2016'),
                new Date('9/2/2016'),
                new Date('9/3/2016'),
                new Date('9/3/2016'),
                new Date('9/3/2016'),
                new Date('9/3/2016'),
                new Date('9/3/2016'),
                new Date('9/5/2016'),
                new Date('9/5/2016'),
                new Date('9/23/2016'),
                new Date('9/23/2016'),
                new Date('9/5/2016'),
                new Date('9/5/2016'),
                new Date('9/5/2016'),
                new Date('9/3/2016'),
                new Date('9/3/2016'),
                new Date('9/3/2016'),
                new Date('9/23/2016'),
                new Date('9/3/2016'),
                new Date('9/3/2016'),
                new Date('9/23/2016'),
                new Date('9/23/2016'),
                new Date('9/23/2016'),
                new Date('9/23/2016'),
                new Date('9/23/2016'),
                new Date('9/3/2016'),
                new Date('9/12/2016'),
                new Date('9/2/2016'),
                new Date('9/2/2016'),
                new Date('9/23/2016'),
                new Date('9/23/2016'),
                new Date('9/2/2016'),
                new Date('9/2/2016'),
                new Date('9/2/2016'),
                new Date('9/12/2016'),
                new Date('9/12/2016'),
                new Date('9/12/2016'),
                new Date('9/2/2016'),
                new Date('9/23/2016'),
                new Date('9/5/2016'),
                new Date('9/5/2016'),
                new Date('9/5/2016'),
                new Date('9/5/2016'),
                new Date('9/23/2016'),
                new Date('9/5/2016'),
                new Date('9/5/2016'),
                new Date('9/12/2016'),
                new Date('9/23/2016'),
                new Date('9/12/2016'),
                new Date('9/12/2016'),
                new Date('9/23/2016'),
                new Date('9/12/2016'),
                new Date('9/12/2016'),
                new Date('9/23/2016'),
                new Date('9/12/2016'),
                new Date('9/12/2016'),
                new Date('9/12/2016'),
                new Date('9/23/2016'),
                new Date('9/23/2016'),
                new Date('9/12/2016'),
                new Date('9/12/2016'),
                new Date('9/12/2016'),
                new Date('9/12/2016'),
                new Date('9/23/2016'),
                new Date('9/12/2016'),
                new Date('9/12/2016'),
                new Date('9/23/2016'),
                new Date('9/12/2016'),
                new Date('10/1/2016'),
                new Date('10/1/2016'),
                new Date('10/1/2016'),
                new Date('10/1/2016'),
                new Date('10/1/2016'),
                new Date('10/1/2016'),
                new Date('10/1/2016'),
                new Date('10/1/2016'),
                new Date('10/1/2016'),
                new Date('10/1/2016'),
                new Date('10/1/2016'),
                new Date('10/1/2016'),
                new Date('10/1/2016'),
                new Date('10/1/2016'),
                new Date('10/1/2016'),
                new Date('10/1/2016'),
                new Date('10/1/2016'),
                new Date('10/1/2016'),
                new Date('10/2/2016'),
                new Date('10/2/2016'),
                new Date('10/2/2016'),
                new Date('10/2/2016'),
                new Date('10/2/2016'),
                new Date('10/2/2016'),
                new Date('10/2/2016'),
                new Date('10/2/2016'),
                new Date('10/2/2016'),
                new Date('10/2/2016'),
                new Date('10/2/2016'),
                new Date('10/2/2016'),
                new Date('10/2/2016'),
                new Date('10/2/2016'),
                new Date('10/2/2016'),
                new Date('10/2/2016'),
                new Date('10/2/2016'),
                new Date('10/2/2016'),
                new Date('10/2/2016'),
                new Date('10/2/2016'),
                new Date('10/2/2016'),
                new Date('10/2/2016'),
                new Date('10/2/2016'),
                new Date('10/2/2016'),
                new Date('10/2/2016'),
                new Date('10/2/2016'),
                new Date('10/2/2016'),
                new Date('10/2/2016')
            ]
        },
        {
            // Should not require maintenance
            id: 2,
            lastTireChange: new Date('10/29/2016'),
            manufacturer: 'FooPlane',
            landings: [
                new Date('9/1/2015'),
                new Date('9/5/2015'),
                new Date('9/12/2016'),
                new Date('9/12/2015'),
                new Date('1/1/2016'),
                new Date('10/1/2015'),
                new Date('10/23/2015'),
                new Date('9/12/2016'),
                new Date('10/28/2015'),
                new Date('11/15/2015'),
                new Date('12/22/2015'),
                new Date('12/22/2015'),
                new Date('12/27/2015'),
                new Date('1/7/2016'),
                new Date('2/1/2016'),
                new Date('2/1/2016'),
                new Date('2/1/2016'),
                new Date('2/1/2016'),
                new Date('9/23/2016'),
                new Date('2/1/2016'),
                new Date('9/23/2016'),
                new Date('9/12/2016'),
                new Date('9/1/2016'),
                new Date('9/2/2016'),
                new Date('9/2/2016'),
                new Date('9/23/2016'),
                new Date('9/2/2016'),
                new Date('9/2/2016'),
                new Date('9/2/2016'),
                new Date('9/5/2016'),
                new Date('9/5/2016'),
                new Date('9/5/2016'),
                new Date('9/5/2016'),
                new Date('9/5/2016'),
                new Date('9/5/2016'),
                new Date('9/2/2016'),
                new Date('9/2/2016'),
                new Date('9/23/2016'),
                new Date('9/2/2016'),
                new Date('9/2/2016'),
                new Date('9/23/2016'),
                new Date('9/2/2016'),
                new Date('9/2/2016'),
                new Date('9/2/2016'),
                new Date('9/2/2016'),
                new Date('9/2/2016'),
                new Date('9/2/2016'),
                new Date('9/2/2016'),
                new Date('9/12/2016'),
                new Date('9/2/2016'),
                new Date('9/2/2016'),
                new Date('9/2/2016'),
                new Date('9/2/2016'),
                new Date('9/3/2016'),
                new Date('9/3/2016'),
                new Date('9/3/2016'),
                new Date('9/3/2016'),
                new Date('9/3/2016'),
                new Date('9/5/2016'),
                new Date('9/5/2016'),
                new Date('9/23/2016'),
                new Date('9/23/2016'),
                new Date('9/5/2016'),
                new Date('9/5/2016'),
                new Date('9/5/2016'),
                new Date('9/3/2016'),
                new Date('9/3/2016'),
                new Date('9/3/2016'),
                new Date('9/23/2016'),
                new Date('9/3/2016'),
                new Date('9/3/2016'),
                new Date('9/23/2016'),
                new Date('9/23/2016'),
                new Date('9/23/2016'),
                new Date('9/23/2016'),
                new Date('9/23/2016'),
                new Date('9/3/2016'),
                new Date('9/12/2016'),
                new Date('9/2/2016'),
                new Date('9/2/2016'),
                new Date('9/23/2016'),
                new Date('9/23/2016'),
                new Date('9/2/2016'),
                new Date('9/2/2016'),
                new Date('9/2/2016'),
                new Date('9/12/2016'),
                new Date('9/12/2016'),
                new Date('9/12/2016'),
                new Date('9/2/2016'),
                new Date('9/23/2016'),
                new Date('9/5/2016'),
                new Date('9/5/2016'),
                new Date('9/5/2016'),
                new Date('9/5/2016'),
                new Date('9/23/2016'),
                new Date('9/5/2016'),
                new Date('9/5/2016'),
                new Date('9/12/2016'),
                new Date('9/23/2016'),
                new Date('9/12/2016'),
                new Date('9/12/2016'),
                new Date('9/23/2016'),
                new Date('9/12/2016'),
                new Date('9/12/2016'),
                new Date('9/23/2016'),
                new Date('9/12/2016'),
                new Date('9/12/2016'),
                new Date('9/12/2016'),
                new Date('9/23/2016'),
                new Date('9/23/2016'),
                new Date('9/12/2016'),
                new Date('9/12/2016'),
                new Date('9/12/2016'),
                new Date('9/12/2016'),
                new Date('9/23/2016'),
                new Date('9/12/2016'),
                new Date('9/12/2016'),
                new Date('9/23/2016'),
                new Date('9/12/2016'),
                new Date('10/1/2016'),
                new Date('10/1/2016'),
                new Date('10/1/2016'),
                new Date('10/1/2016'),
                new Date('10/1/2016'),
                new Date('10/1/2016'),
                new Date('10/1/2016'),
                new Date('10/1/2016'),
                new Date('10/1/2016'),
                new Date('10/1/2016'),
                new Date('10/1/2016'),
                new Date('10/1/2016'),
                new Date('10/1/2016'),
                new Date('10/1/2016'),
                new Date('10/1/2016'),
                new Date('10/1/2016'),
                new Date('10/1/2016'),
                new Date('10/1/2016'),
                new Date('10/2/2016'),
                new Date('10/2/2016'),
                new Date('10/2/2016'),
                new Date('10/2/2016'),
                new Date('10/2/2016'),
                new Date('10/2/2016'),
                new Date('10/2/2016'),
                new Date('10/2/2016'),
                new Date('10/2/2016'),
                new Date('10/2/2016'),
                new Date('10/2/2016'),
                new Date('10/2/2016'),
                new Date('10/2/2016'),
                new Date('10/2/2016'),
                new Date('10/2/2016'),
                new Date('10/2/2016'),
                new Date('10/2/2016'),
                new Date('10/2/2016'),
                new Date('10/2/2016'),
                new Date('10/2/2016'),
                new Date('10/2/2016'),
                new Date('10/2/2016'),
                new Date('10/2/2016'),
                new Date('10/2/2016'),
                new Date('10/2/2016'),
                new Date('10/2/2016'),
                new Date('10/2/2016'),
                new Date('10/2/2016')
            ]
        },
        {
            // Should require maintenance
            id: 3,
            lastTireChange: new Date('9/1/2016'),
            manufacturer: 'BarPlane',
            landings: [
                new Date('9/1/2015'),
                new Date('9/5/2015'),
                new Date('9/12/2016'),
                new Date('9/12/2015'),
                new Date('1/1/2016'),
                new Date('10/1/2015'),
                new Date('10/23/2015'),
                new Date('9/12/2016'),
                new Date('10/28/2015'),
                new Date('11/15/2015'),
                new Date('12/22/2015'),
                new Date('12/22/2015'),
                new Date('12/27/2015'),
                new Date('1/7/2016'),
                new Date('2/1/2016'),
                new Date('2/1/2016'),
                new Date('2/1/2016'),
                new Date('2/1/2016'),
                new Date('9/23/2016'),
                new Date('2/1/2016'),
                new Date('9/23/2016'),
                new Date('9/12/2016'),
                new Date('9/1/2016'),
                new Date('9/2/2016'),
                new Date('9/2/2016'),
                new Date('9/23/2016'),
                new Date('9/2/2016'),
                new Date('9/2/2016'),
                new Date('9/2/2016'),
                new Date('9/5/2016'),
                new Date('9/5/2016'),
                new Date('9/5/2016'),
                new Date('9/5/2016'),
                new Date('9/5/2016'),
                new Date('9/5/2016'),
                new Date('9/2/2016'),
                new Date('9/2/2016'),
                new Date('9/23/2016'),
                new Date('9/2/2016'),
                new Date('9/2/2016'),
                new Date('9/23/2016'),
                new Date('9/2/2016'),
                new Date('9/2/2016'),
                new Date('9/2/2016'),
                new Date('9/2/2016'),
                new Date('9/2/2016'),
                new Date('9/2/2016'),
                new Date('9/2/2016'),
                new Date('9/12/2016'),
                new Date('9/2/2016'),
                new Date('9/2/2016'),
                new Date('9/2/2016'),
                new Date('9/2/2016'),
                new Date('9/3/2016'),
                new Date('9/3/2016'),
                new Date('9/3/2016'),
                new Date('9/3/2016'),
                new Date('9/3/2016'),
                new Date('9/5/2016'),
                new Date('9/5/2016'),
                new Date('9/23/2016'),
                new Date('9/23/2016'),
                new Date('9/5/2016'),
                new Date('9/5/2016'),
                new Date('9/5/2016'),
                new Date('9/3/2016'),
                new Date('9/3/2016'),
                new Date('9/3/2016'),
                new Date('9/23/2016'),
                new Date('9/3/2016'),
                new Date('9/3/2016'),
                new Date('9/23/2016'),
                new Date('9/23/2016'),
                new Date('9/23/2016'),
                new Date('9/23/2016'),
                new Date('9/23/2016'),
                new Date('9/3/2016'),
                new Date('9/12/2016'),
                new Date('9/2/2016'),
                new Date('9/2/2016'),
                new Date('9/23/2016'),
                new Date('9/23/2016'),
                new Date('9/2/2016'),
                new Date('9/2/2016'),
                new Date('9/2/2016'),
                new Date('9/12/2016'),
                new Date('9/12/2016'),
                new Date('9/12/2016'),
                new Date('9/2/2016'),
                new Date('9/23/2016'),
                new Date('9/5/2016'),
                new Date('9/5/2016'),
                new Date('9/5/2016'),
                new Date('9/5/2016'),
                new Date('9/23/2016'),
                new Date('9/5/2016'),
                new Date('9/5/2016'),







                new Date('10/2/2016'),
                new Date('10/2/2016'),
                new Date('10/2/2016'),
                new Date('10/2/2016'),
                new Date('10/2/2016'),
                new Date('10/2/2016'),
                new Date('10/2/2016'),
                new Date('10/2/2016'),
                new Date('10/2/2016'),
                new Date('10/2/2016'),
                new Date('10/2/2016'),
                new Date('10/2/2016'),
                new Date('10/2/2016'),
                new Date('10/2/2016'),
                new Date('10/2/2016'),
                new Date('10/2/2016'),
                new Date('10/2/2016'),
                new Date('10/2/2016')
            ]
        },
        {
            // Should not require maintenance
            id: 4,
            lastTireChange: new Date('10/29/2016'),
            manufacturer: 'BarPlane',
            landings: [
                new Date('9/1/2015'),
                new Date('9/5/2015'),
                new Date('9/12/2016'),
                new Date('9/12/2015'),
                new Date('1/1/2016'),
                new Date('10/1/2015'),
                new Date('10/23/2015'),
                new Date('9/12/2016'),
                new Date('10/28/2015'),
                new Date('11/15/2015'),
                new Date('12/22/2015'),
                new Date('12/22/2015'),
                new Date('12/27/2015'),
                new Date('1/7/2016'),
                new Date('2/1/2016'),
                new Date('2/1/2016'),
                new Date('2/1/2016'),
                new Date('2/1/2016'),
                new Date('9/23/2016'),
                new Date('2/1/2016'),
                new Date('9/23/2016'),
                new Date('9/12/2016'),
                new Date('9/1/2016'),
                new Date('9/2/2016'),
                new Date('9/2/2016'),
                new Date('9/23/2016'),
                new Date('9/2/2016'),
                new Date('9/2/2016'),
                new Date('9/2/2016'),
                new Date('9/5/2016'),
                new Date('9/5/2016'),
                new Date('9/5/2016'),
                new Date('9/5/2016'),
                new Date('9/5/2016'),
                new Date('9/5/2016'),
                new Date('9/2/2016'),
                new Date('9/2/2016'),
                new Date('9/23/2016'),
                new Date('9/2/2016'),
                new Date('9/2/2016'),
                new Date('9/23/2016'),
                new Date('9/2/2016'),
                new Date('9/2/2016'),
                new Date('9/2/2016'),
                new Date('9/2/2016'),
                new Date('9/2/2016'),
                new Date('9/2/2016'),
                new Date('9/2/2016'),
                new Date('9/12/2016'),
                new Date('9/2/2016'),
                new Date('9/2/2016'),
                new Date('9/2/2016'),
                new Date('9/2/2016'),
                new Date('9/3/2016'),
                new Date('9/3/2016'),
                new Date('9/3/2016'),
                new Date('9/3/2016'),
                new Date('9/3/2016'),
                new Date('9/5/2016'),
                new Date('9/5/2016'),


                new Date('9/23/2016'),
                new Date('9/23/2016'),
                new Date('9/23/2016'),
                new Date('9/23/2016'),
                new Date('9/23/2016'),
                new Date('9/3/2016'),
                new Date('9/12/2016'),
                new Date('9/2/2016'),
                new Date('9/2/2016'),
                new Date('9/23/2016'),
                new Date('9/23/2016'),
                new Date('9/2/2016'),
                new Date('9/2/2016'),
                new Date('9/2/2016'),
                new Date('9/12/2016'),
                new Date('9/12/2016'),
                new Date('9/12/2016'),
                new Date('9/2/2016'),
                new Date('9/23/2016'),
                new Date('9/5/2016'),
                new Date('9/5/2016'),
                new Date('9/5/2016'),
                new Date('9/5/2016'),
                new Date('9/23/2016'),
                new Date('9/5/2016'),
                new Date('9/5/2016'),
                new Date('9/12/2016'),
                new Date('9/23/2016'),
                new Date('9/12/2016'),
                new Date('9/12/2016'),
                new Date('9/23/2016'),
                new Date('9/12/2016'),
                new Date('9/12/2016'),
                new Date('9/23/2016'),
                new Date('9/12/2016'),
                new Date('9/12/2016'),
                new Date('9/12/2016'),
                new Date('9/23/2016'),
                new Date('9/23/2016'),
                new Date('9/12/2016'),
                new Date('9/12/2016'),
                new Date('9/12/2016'),
                new Date('9/12/2016'),
                new Date('9/23/2016'),
                new Date('9/12/2016'),
                new Date('9/12/2016'),
                new Date('9/23/2016'),
                new Date('9/12/2016'),
                new Date('10/1/2016'),
                new Date('10/1/2016'),
                new Date('10/1/2016'),
                new Date('10/1/2016'),
                new Date('10/1/2016'),
                new Date('10/1/2016'),
                new Date('10/1/2016'),
                new Date('10/1/2016'),
                new Date('10/1/2016'),
                new Date('10/1/2016'),
                new Date('10/1/2016'),
                new Date('10/1/2016'),
                new Date('10/1/2016'),
                new Date('10/1/2016'),
                new Date('10/1/2016'),
                new Date('10/1/2016'),
                new Date('10/1/2016'),
                new Date('10/1/2016'),
                new Date('10/2/2016'),
                new Date('10/2/2016'),
                new Date('10/2/2016'),
                new Date('10/2/2016'),
                new Date('10/2/2016'),
                new Date('10/2/2016'),
                new Date('10/2/2016'),
                new Date('10/2/2016'),
                new Date('10/2/2016'),
                new Date('10/2/2016'),
                new Date('10/2/2016'),
                new Date('10/2/2016'),
                new Date('10/2/2016'),
                new Date('10/2/2016'),
                new Date('10/2/2016'),
                new Date('10/2/2016'),
                new Date('10/2/2016'),
                new Date('10/2/2016'),
                new Date('10/2/2016'),
                new Date('10/2/2016'),
                new Date('10/2/2016'),
                new Date('10/2/2016'),
                new Date('10/2/2016'),
                new Date('10/2/2016'),
                new Date('10/2/2016'),
                new Date('10/2/2016'),
                new Date('10/2/2016'),
                new Date('10/2/2016')
            ]
        },
        {
            // Should require maintenance
            id: 5,
            lastTireChange: new Date('9/1/2016'),
            manufacturer: 'BazPlane',
            landings: [
                new Date('9/1/2015'),
                new Date('9/5/2015'),
                new Date('9/12/2016'),
                new Date('9/12/2015'),
                new Date('1/1/2016'),

                new Date('10/2/2016'),
                new Date('10/2/2016'),
                new Date('10/2/2016'),
                new Date('10/2/2016'),
                new Date('10/2/2016'),
                new Date('10/2/2016'),
                new Date('10/2/2016'),
                new Date('10/2/2016'),
                new Date('10/2/2016')
            ]
        },
        {
            // Should not require maintenance
            id: 6,
            lastTireChange: new Date('10/29/2016'),
            manufacturer: 'BazPlane',
            landings: [
                new Date('9/1/2015'),
                new Date('9/5/2015'),
                new Date('9/12/2016'),
                new Date('9/12/2015'),
                new Date('1/1/2016'),
                new Date('10/1/2015'),
                new Date('10/23/2015'),
                new Date('9/12/2016'),
                new Date('10/28/2015'),
                new Date('11/15/2015'),
                new Date('12/22/2015'),




            ]
        },
    ]
};
 })();

I am trying to use map or reduce but cant really figure out how to do this. How can I efficiently avoid using the for loops and may be use a composite or a callback function to attain the same thing? Any help would be greatly appreciated! I

Upvotes: 0

Views: 120

Answers (3)

Alex Young
Alex Young

Reputation: 4039

If you make an object that has the max landings before tire change for each aircraft e.g.

var maxLandings = {
    FooPlane: 10,
    BarPlane: 40
};

Then you can apply a filter to your array to return the data you need:

const aircraftData = [{
      id: 1,
      lastTireChange: new Date('9/1/2013'),
      manufacturer: 'FooPlane',
      landings: [
        new Date('9/1/2015'),
        new Date('9/5/2015'),
        new Date('9/12/2016'),
        new Date('9/12/2015'),
      ]
    }, {
      id: 2,
      lastTireChange: new Date('10/29/2013'),
      manufacturer: 'FooPlane',
      landings: [
        new Date('9/1/2015'),
        new Date('9/5/2015'),
        new Date('9/12/2016'),
        new Date('9/12/2015'),
        new Date('1/1/2016'),
        new Date('10/1/2015'),
        new Date('10/23/2015')
      ]
    }, {
      id: 2,
      lastTireChange: new Date('10/29/2013'),
      manufacturer: 'FooPlane',
      landings: [
        new Date('9/1/2015'),
        new Date('9/5/2015'),
        new Date('9/12/2016'),
        new Date('9/12/2015'),
        new Date('1/1/2016'),
        new Date('10/1/2015'),
        new Date('10/23/2015')
      ]
    }, {
      id: 3,
      lastTireChange: new Date('9/1/2013'),
      manufacturer: 'BarPlane',
      landings: [
        new Date('9/1/2015'),
        new Date('9/5/2015'),
        new Date('9/12/2016'),
        new Date('9/12/2015'),
        new Date('1/1/2016'),
        new Date('10/1/2015'),
        new Date('10/23/2015'),
        new Date('9/12/2016'),
        new Date('10/28/2015'),
        new Date('11/15/2015'),
        new Date('12/22/2015'),
        new Date('12/22/2015')
      ]
    }];
    
const maxLandings = {
    FooPlane: 25,
    BarPlane: 3
};

    function getAircraftsDueForTireChange(allAircraft, maxLandings) {
        return allAircraft.filter(aircraft => {
            var landingsSinceLastTireChange = aircraft.landings.filter(landing => {
                return landing.getTime() >= aircraft.lastTireChange.getTime();
            });
            return landingsSinceLastTireChange.length >= maxLandings[aircraft.manufacturer];
        });
    }
    
  console.log(getAircraftsDueForTireChange(aircraftData, maxLandings))

Upvotes: 1

user4639281
user4639281

Reputation:

Your input data is not valid JavaScript, so I've modified it to be valid for testing purposes.

First create an object to store the tire change intervals for each OEM, this allows us to remove the multiple if statements in favor of a single statement.

Next, use Array#filter on the aircraft array. In the callback, run Array#filter on the landings array of the given aircraft, returning true if the landings happened since the last tire change or not, then compare the resulting array length to the corresponding tire change interval for the OEM of that aircraft.

window.CAMP = { aircraftData: [{ id: 1, lastTireChange: new Date('9/1/2013'), manufacturer: 'FooPlane', landings: [ new Date('9/1/2015'), new Date('9/5/2015'), new Date('9/12/2016'), new Date('9/12/2015') ] }, { id: 2, lastTireChange: new Date('10/29/2013'), manufacturer: 'FooPlane', landings: [ new Date('9/1/2015'), new Date('9/5/2015'), new Date('9/12/2016'), new Date('9/12/2015'), new Date('1/1/2016'), new Date('10/1/2015'), new Date('10/23/2015') ] }, { id: 2, lastTireChange: new Date('10/29/2013'), manufacturer: 'FooPlane', landings: [ new Date('9/1/2015'), new Date('9/5/2015'), new Date('9/12/2016'), new Date('9/12/2015'), new Date('1/1/2016'), new Date('10/1/2015'), new Date('10/23/2015') ] }, { id: 3, lastTireChange: new Date('9/1/2013'), manufacturer: 'BarPlane', landings: [ new Date('9/1/2015'), new Date('9/5/2015'), new Date('9/12/2016'), new Date('9/12/2015'), new Date('1/1/2016'), new Date('10/1/2015'), new Date('10/23/2015'), new Date('9/12/2016'), new Date('10/28/2015'), new Date('11/15/2015'), new Date('12/22/2015'), new Date('12/22/2015') ] }] };

function getAircraftsDueForTireChange(aircrafts) {
  // Changed FooPlane to 4 so we can show some passing the filter
  const intervals = { 'FooPlane': 4, 'BarPlane': 75, 'BazPlane': 200 };
  return aircrafts.filter(a => a.landings.filter(e => e.getTime() >= a.lastTireChange.getTime()).length >= intervals[a.manufacturer]);
}

console.log(getAircraftsDueForTireChange(window.CAMP.aircraftData).length); // 3

Upvotes: 1

Nelson Teixeira
Nelson Teixeira

Reputation: 6572

I had created a code that's exactly equal to @TinyGiant's answer. But I also made an working example. I changed the values of landings and some dates to make the code work with this small sample.

window.CAMP = {
    aircraftData: [{
      // Should require maintenance
      id: 1,
      lastTireChange: new Date('9/1/2013'),
      manufacturer: 'FooPlane',
      landings: [
        new Date('9/1/2015'),
        new Date('9/5/2015'),
        new Date('9/12/2016'),
        new Date('9/12/2015'),
      ]
    }, {
      id: 2,
      lastTireChange: new Date('10/29/2013'),
      manufacturer: 'FooPlane',
      landings: [
        new Date('9/1/2015'),
        new Date('9/5/2015'),
        new Date('9/12/2016'),
        new Date('9/12/2015'),
        new Date('1/1/2016'),
        new Date('10/1/2015'),
        new Date('10/23/2015')
      ]
    }, {
      id: 2,
      lastTireChange: new Date('10/29/2013'),
      manufacturer: 'FooPlane',
      landings: [
        new Date('9/1/2015'),
        new Date('9/5/2015'),
        new Date('9/12/2016'),
        new Date('9/12/2015'),
        new Date('1/1/2016'),
        new Date('10/1/2015'),
        new Date('10/23/2015')
      ]
    }, {
      id: 3,
      lastTireChange: new Date('9/1/2013'),
      manufacturer: 'BarPlane',
      landings: [
        new Date('9/1/2015'),
        new Date('9/5/2015'),
        new Date('9/12/2016'),
        new Date('9/12/2015'),
        new Date('1/1/2016'),
        new Date('10/1/2015'),
        new Date('10/23/2015'),
        new Date('9/12/2016'),
        new Date('10/28/2015'),
        new Date('11/15/2015'),
        new Date('12/22/2015'),
        new Date('12/22/2015')
      ]
    }]
};

function getAircraftsDueForTireChange(allAircraftData) {
    var aircraftDueForTireChanges = [];
    for (var i = 0; i < allAircraftData.length; i++) {
        var landingsSinceLastTireChange = [];
        for (var j = 0; j < allAircraftData[i].landings.length; j++) {
            if (allAircraftData[i].landings[j] >= allAircraftData[i].lastTireChange)
                landingsSinceLastTireChange.push(allAircraftData[i].landings[j]);
        }
        if (allAircraftData[i].manufacturer == 'FooPlane' && landingsSinceLastTireChange.length >= 3)  // 120
            aircraftDueForTireChanges.push(allAircraftData[i]);
        else if (allAircraftData[i].manufacturer == 'BarPlane' && landingsSinceLastTireChange.length >= 2)  // 75
            aircraftDueForTireChanges.push(allAircraftData[i]);
        else if (allAircraftData[i].manufacturer == 'BazPlane' && landingsSinceLastTireChange.length >= 5) // 200
            aircraftDueForTireChanges.push(allAircraftData[i]);    
    }
    return aircraftDueForTireChanges;
}

function getAircraftsDueForTireChangeV2(allAircraftData) {
  var tireChangeMatrix = {FooPlane: 3, BarPlane: 2, BazPlane: 5};
  return allAircraftData.filter(
     aircraft=>aircraft.landings.filter(
       landing=>landing >= aircraft.lastTireChange).length>=tireChangeMatrix[aircraft.manufacturer]
  );
}
console.log(getAircraftsDueForTireChange(CAMP.aircraftData));
console.log(getAircraftsDueForTireChangeV2(CAMP.aircraftData));

JSFiddle: https://jsfiddle.net/q0tanxda/5/

But also want to point that you have 2 errors in your original code:

function getAircraftsDueForTireChange(allAircraftData) {
  var aircraftDueForTireChanges = [];
  for (var i = 0; i < allAircraftData.length; i++) {
    var landingsSinceLastTireChange = [];
    for (var j = 0; j < allAircraftData[i].landings.length; j++) {
      if (allAircraftData[i].landings[j] >= allAircraftData[i].lastTireChange)
        landingsSinceLastTireChange.push(allAircraftData[i].landings[j]); 

      // ERROR: you included the below tests in every interaction of landings, 
      // the right would be calculate all the landing prior to the tests
      if (allAircraftData[i].manufacturer == 'FooPlane' && landingsSinceLastTireChange.length >= 120)
        aircraftDueForTireChanges.push(allAircraftData[i]);
      else if (allAircraftData[i].manufacturer == 'BarPlane' && landingsSinceLastTireChange.length >= 75)
        aircraftDueForTireChanges.push(allAircraftData[i]);
      else if (allAircraftData[i].manufacturer == 'BazPlane' && landingsSinceLastTireChange.length >= 200)
        aircraftDueForTireChanges.push(allAircraftData[i]);
    }
    // ERROR: you returned from the function in the first interation 
    // of the loop! you checked only one plane! 
    return aircraftDueForTireChanges;
  }
}

the correct original code would be as I written in the snippet's code

Upvotes: 0

Related Questions