LinkedIn Pre-screening challenge

Summary

Solve. Time limit is 60 minutes. Go.

1) Implement a FIFO (first in, first out queue) in JavaScript.

var fifo = (function() {
  var _queue = [];

  var _set = function(val) {
    if (!val) {
      return;
    }
    _queue.push(val);
  }

  var _get = function() {
    return _queue.shift();
  }

  return  {
    get : _get,
    set : _set
  }
})();

2) Implement a Palindrome checker that takes a single string as a parameter and returns a Boolean value. Please do not use the built-in MDN spec string or array methods such as string.split(), array.join(), etc.

/**
 * @return {boolean}
 * @param {string}
 */
var checker = function(str) {
  if (!str) {
    throw 'Error, string required'
  }

  var backwards = '';
  for (var i = str.length; i >= 0; i--) {
    backwards += str.charAt(i);
  }

  return (str === backwards);
}

3) Write a function to set the style of a DOM element WITHOUT using a library like jQuery. Your function should take an element, a name of the style, and a value.

/**
 * @return {void}
 * @param {DOM element} ele
 * @param {string}
 * @param {string}
 */
var styler = function(ele, styleName, styleValue) {
  if (!(ele && styleName && styleValue)) {
    return;
  }
  ele.style[styleName] = styleValue;
}

4) Make an AJAX request to the API using endpoint "/api/skills" ....

// Requesting remote data ....
$.ajax({
  dataType: "json",
  url: '/api/skills',
  data: {},
  success: function(response, status, xhr) {
    ...
  }
});

5) Format the response

var data = [
  { 'skill': 'javascript', 'user': 'Chad' },
  { 'skill': 'javascript', 'user': 'Bill' },
  { 'skill': 'css', 'user': 'Sue' },
  { 'skill': 'javascript', 'user': 'Sue' },
  { 'skill': 'css', 'user': 'Bill' },
  { 'skill': 'html', 'user': 'Sue' }
];

var output = {};

for (var j = 0, len = data.length; j < len; j++) {
  var item = data[j];

  // has this skill been created yet?
  if (!output[item['skill']]) {
    output[item['skill']] = {
      'user' : []
    }
  }

  // only add if the user has not been added yet.
  if (item.user) {
    if ($.inArray(item.user, output[item['skill']].user !== -1)) {
      output[item['skill']].user.push(item.user)
    }
  }
}

var rearranged = []
for (var k in output) {
  rearranged.push({
    'skill' : k,
    'user'  : output[k].user
  })
}

rearranged.sort(function(a, b) {
  if (a.user.length < b.user.length) {
    return 1;
  }
  if (a.user.length > b.user.length) {
    return -1;
  }
  return 0;
});