0

I am trying to use filter to make my life easier.

My goal: Change the closeTime.hours of filter openDay(TUESDAY)

I have an array of objects that looks like:

buildHours = [
  {
    "openDay": "MONDAY",
    "openTime": {},
    "closeDay": "MONDAY",
    "closeTime": {
      "hours": 24
    }
  },
  {
    "openDay": "TUESDAY",
    "openTime": {
      "hours": 9
    },
    "closeDay": "TUESDAY",
    "closeTime": {
      "hours": 17
    }
  },
]

How I am doing this right now is removing the "Tuesday" Object using

    const tempObject = buildHours.filter(i => i.openDay !== "TUESDAY"); // Destroy Tues
    const tempHours = buildHours.filter(i => i.openDay === "TUESDAY")[0]; // Save Tues Obj
    tempHours.openTime.hours = e.value; // Change Hour
    tempObject.push(tempHours); // Recombine
    console.log(tempObject);

Then "rebuilding" the "TUESDAY" object and adding it back to the main object. Although it works .. It seems a little convoluted. Isn't there a way I can use a combination of filter() and set closeTime.hours = 17? I have tried 6 ways to Sunday and nothing seems to work.

Is the way I am doing it right now the preferred method? Remove the object, rebuild and combine?

Or is there a more elegant way to change the hours for Tuesday without destroying the object and rebuilding it in the process?

1 Answer 1

1

Without knowing the rest of the context, it's hard to say what the "best" way to do this would be... but, generally, I'd use map instead of filter; something like:

const buildHours = [ /* ... */ ];  // no change to this

const handleHourChange = (e) => {
  return buildHours.map(o => {
    if (o.openDay !== 'TUESDAY') return o;

    return {
      ...o,
      openTime: {
        ...o.openTime,
        hours: e.value,
      },
    };
  };
});

Also - one minor point on your code - instead of using filter to find the Tuesday object, you can use find -

const tempHours = buildHours.find(i => i.openDay === "TUESDAY");

And even if you did want to use filter and just get the first one, you can use array destructuring:

const [tempHours] = buildHours.filter(i => i.openDay === "TUESDAY");
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.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.