Search code examples
javascriptecmascript-6object-literal

What do the square brackets after ES6 function do?


Recently I was looking for a way to rewrite an ugly switch/case statement and came across this Medium article.

I rewrote my switch/case into an es6 function like this:

const url = category => ({
          'itemA': itemAService.getItemCategories(payload),
          'itemB': itemBService.getItemCategories(payload),
        })[category]

When I call this function with something like const response = url(category); it works, which is great! But then I got to wondering what exactly the [category] means at the end of the function. I thought maybe it was an Immediately Invoked Function, but that didn't seem right either.

The article mentions that it's an object literal, but when I went to the MDN docs I couldn't find anything that explained what this is or what it does, or even any examples that showcase this same thing.

So what does it do?


Solution

  • It's not "after" the function, it is in the functions body. It could also be written as:

      const url  = category => {
        const obj = {
          'itemA': itemAService.getItemCategories(payload),
          'itemB': itemBService.getItemCategories(payload),
        };
    
        return obj[category];
     };
    

    So this is basically just a dynamic property lookup in the object.