This code works just fine, but could obviously be more elegantly written.

The basic idea is to create an array of categories from a text input. The code splits up the text input by commas to create the array and trims away white space.

I considered using unshift to add the 'Inbox' default category to the beggining, but figure there must be an even better way. All in all, this is probably the 4th or 5th version of this code.

    var CategoriesForm = event.target.category.value;
    var CategoriesFormTrimmed = CategoriesForm.replace(" ", "");
    var categoriesDefault = ['Inbox']; //default category
    var categoriesJoined = [];
    if (CategoriesForm) {
      var splitUpCategories = CategoriesFormTrimmed.split(',');
      categoriesJoined = categoriesDefault.concat(splitUpCategories);
    } else {
      categoriesJoined = ['Inbox'];

  • \$\begingroup\$ Minor quibble: JavaScript conventionally uses camelCase for everything except constructor functions. So style-wise, your CategoriesForm should be categoriesForm, and the same for the -Trimmed var. Joseph's answer below sidesteps all those variables anyway, but just as a general note. \$\endgroup\$ – Flambino Aug 27 '15 at 8:50

That same operation can be streamlined into:

var categoriesJoined = event.target.category.value
  .map(function(category){ return category.trim(); })
  .filter(function(category){ return !!category; })

or Inbox first:

var categoriesJoined = ['Inbox'].concat(event.target.category.value
  .map(function(category){ return category.trim(); })
  .filter(function(category){ return !!category; }))
  • We split first by , giving us access to an array.
  • We clean up each item using map by returning a cleaned value using trim
  • Then filter out those who are totally whitespace (they end up as blanks when trimmed).
  • Add in "Inbox".
  • \$\begingroup\$ Awesome! This is super helpful. \$\endgroup\$ – Taylor Ackley Aug 27 '15 at 16:45

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.