1

In the state.1.extras.mileage, I have an array with 3 objects with the values: 1000, 2000, 3000. I want to make a function that when an user inputs a number between 1 & 1000 you get the object

        {
          name: '1.000 mileage',
          mileage: '1.000',
          description: 'mileage-description',
        },

when the input is between 1000 & 2000 you will get the second object, and when you input is between 2000&3000 you get the third object.

This is my current function:

export const getMileageName = (
  state: GlobalState,
  pdbId: ?string = null,
  index?: number = 0,
): string => {
  const mileages = getMileages(state, pdbId);
  if (!mileages || !mileages[index]) {
    throw Error('Couldn\'t find mileage');
  }

  return mileages[index].name;
};

export const getMileageByKilometers = (
  state: GlobalState,
  pdbId: ?string = null,
  kilometers: number,
) => {
  const mileages = getMileages(state, pdbId);
  console.log(mileages);
  return mileages.find([0]);
};




const state = {
  pdb: {
    items: {
      1: {
        extras: {
          duration: [
            {
              name: 'duration-name',
              description: 'duration',
              duration: '40',
            },
          ],
          extra: [
            { name: 'extra' },
          ],
          contract: [
            { name: 'contract' },
          ],
          claimfree: [
            { name: 'claimfree' },
          ],
          mileage: [
            {
              name: '1.000 mileage',
              mileage: '1.000',
              description: 'mileage-description',
            },
            {
              name: '2.000 mileage',
              mileage: '2.000',
              description: 'mileage-description 2',
            },
            {
              name: '3.000 mileage',
              mileage: '3.000',
              description: 'mileage-description 3',
            },
          ],
        },
      },
    },
  },
};
1
  • In your case, given the current expected input and range of mileages, I think it would actually be easier and more efficient to just convert it into an index. Here's a performance benchmark demonstrating the difference between this and Rodius' answer measurethat.net/Benchmarks/ShowResult/11099 Commented Apr 19, 2018 at 14:15

1 Answer 1

1

You have an array with three objects, each one with a mileage value. Using the javascript find function you will get the 1st value that meets the condition you state.

Your function:

getObject(speed) {
  const mileage= [
            {
              name: '1000 mileage',
              mileage: '1000',
              description: 'mileage-description',
            },
            {
              name: '2000 mileage',
              mileage: '2000',
              description: 'mileage-description 2',
            },
            {
              name: '3000 mileage',
              mileage: '3000',
              description: 'mileage-description 3',
            }
          ];

  return mileage.find(obj => parseInt(obj.mileage, 10) >= speed);
}

Snippet below:

var speed = [800, 1000, 1001, 995, 2000, 2958, 3000];
console.log(speed);
var getMileage = (speed) => {
  const mileage= [
      {
        name: '1000 mileage',
        mileage: '1000',
        description: 'mileage-description',
      },
      {
        name: '2000 mileage',
        mileage: '2000',
        description: 'mileage-description 2',
      },
      {
        name: '3000 mileage',
        mileage: '3000',
        description: 'mileage-description 3',
      }
    ];
    
    return mileage.find(obj => parseInt(obj.mileage, 10) >= speed);
};

console.log(speed.forEach(s => console.log(s, 'object: ', getMileage(s))));

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.