LinkedIn Pre-screening challenge
Summary
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;
});