function countFieldPersent(arr, field) {
    var data = arr.reduce((r, item) => {
        var value = String(item[field]);
        if(typeof r[value] === 'undefined') {
            r[value] = 0;
        }
        return ++r[value], r;
    }, {});
    return Object.getOwnPropertyNames(data).map(label => ({
        label,
        value : (data[label] * 100) / arr.length
    }));
}
var arr = [{ FirstName: 'Pavel',      LastName: 'Pavlol',  Phone: '1234567',  Gender:'male' },
{ FirstName: 'Ivan', 	     LastName: 'Ivanov', Phone: '1234567',  Gender:'female' }];
var result = countFieldPersent(arr, 'Gender');<a href="/page2">Page 2</a>. Соответственно наше SPA должен запускать свой роутинг перехватывая клики по ссылкам и основываясь на атрибуте href кликнутой ссылкиfunction render(node) {
    var links = node.getElementsByTagName('a');
    for(let i = links.length; i--;) {
        links[i].addEventListener('click', doLinkClick);
    }
}
function doLinkClick(event) {
    var href = event.target.getAttribute('href');
    if(!href.startsWith('/')) return true;
    event.preventDefault();
    router(href);
}function indexRoute(request) {
    var pageData = {
        template : 'page-index',
        activeMenuIndex : 0
    };
    if(request.url.query === 'json') {
        request.json(pageData);
    } else {
        request.html(baseTemplate(pageData));
    }
}var http = require('http');
var express = require('express');
var site1App = express();
var site2App = express();
var site1Req = site1App();
var site2Req = site2App();
var server = http.createServer((req, res) => {
    switch(req.headers.host) {
        case 'site1.ru':
        case 'www.site1.ru':
            site1Req(req, res);
            break;
        case 'site2.ru':
        case 'www.site2.ru':
            site2Req(req, res);
            break;
        default:
            //unknown host
            res.writeHead(404);
            res.end();
    }
});
server.listen(80);for(var i = 0; i < selected.length; i++)for(var i = selected.length; i--; ){
        selected[i].classList.remove('selected');
}function setSelected(topUL) {
    var top = typeof topUL === 'string' ? document.querySelector(topUL) : topUL;
    var selected = top.querySelectorAll('li.selected');
    for(var i = selected.length; i--;) {
        var current = selected[i];
        while(current !== top) {
            current = current.parentNode;
            if(current.nodeName === 'LI') {
                current.classList.add('selected');
            }
        }
    }
}<ul> в дереве      parseInt('00000000000000000000000011111111', 2)CONST1 & CONST2. Я для таких целей использую такой генератор:function* iota() {
    var i = 1;
    while(true) {
        yield i;
        i *= 2;
    }
}var myaudio = $("#myaudio")[0];$("#myblock a").mouseenter(function(){myaudio.play();});$(function() {
    var myaudio = $("#myaudio")[0];
    $("#myblock a").mouseenter(function(){myaudio.play();});
});function findParamPath(obj, prop) {
    if(obj.hasOwnProperty(prop)) return prop;
    var props = Object.getOwnPropertyNames(obj);
    for(var i = props.length; i--; ) {
        if(typeof obj[props[i]] !== 'object') continue;
        var path = findParamPath(obj[props[i]], prop);
        if(path) return props[i] + '.' + path;
    }
    return null;
}var obj = {
    object : {
        client : {
            name : 'Вася',
            phone : '799999999'
        },
        order : {
            param1 : '2122',
            param2 : '1231'
        }
    }
};
console.log(findParamPath(obj, 'name')); // 'object.client.name'
console.log(findParamPath(obj, 'param1')); // 'object.order.param1'
console.log(findParamPath(obj, 'unknown')); // null (не найдено)var http = require('http');
var ipTables = {};
var server = http.createServer((req, res) => {
    //Ваш обработчик запроса или express/connect вместо него
});
server.on('connection', socket => {
    var ip = socket.address().address;
    var time = Date.now();
    if(ip in ipTables) {
        if(time - ipTables[ip].time > 3000) {
            ipTables[ip] = {
                count : 1,
                time
            };
            return;
        }
        ipTables[ip].count++;
        ipTables[ip].time = time;
        if(ipTables[ip].count > 100) {
            socket.end('HTTP/1.1 429 Too Many Requests\n\n');
            socket.destroy(); //Обрываем соеденение, так как ip ломится слишком часто
        }
        return;
    }
    ipTables[ip] = {
        count : 1,
        time
    };
});
server.listen(80);