Eloquent JavaScript - Chapter 5 - functions on functions - function chaining

by Denise Nepraunig

HTML

<h1>Function abstraction - JSON</h1>
<div id="output"></div>
<h2>stringify and parse</h2>

JavaScript

var output = document.getElementById("output");
var result;

var denise = {
    sex: "F",
    name: "Denise",
    born: 1985,
    loves: ["sushi", "horses", "kebap"]
};

var michelle = {
    sex: "F",
    name: "Michelle",
    born: 1993,
    loves: ["dogs", "kebap", "denise :-D"]
};

var christine = {
    sex: "F",
    name: "Christine",
    born: 1967,
    loves: ["honig-milch"]
};

var reinhard = {
    sex: "M",
    name: "Reinhard",
    born: 1963,
    loves: ["reininghaus", "schoko-haselnuss"]
};

var family = [];
family.push(denise);
family.push(michelle);
family.push(christine);
family.push(reinhard);

function average(arr) {
    function plus (a, b) { return a+b };
    return arr.reduce(plus) / arr.length;
}

function age(p) { return 2014 - p.born; }
function male(p) { return p.sex == "M"; }
function female(p) { return p.sex == "F"; }

console.log( "male persons", family.filter(male)) ;
console.log( "female persons", family.filter(female)) ;

console.log( "alter: ", family.map(age) );
console.log("durchschnitt", average(family.map(age)));

var schwestern = [];
schwestern.push(denise);
schwestern.push(michelle);

function filter(arr, fun) {
    var passed = [];
    for(var i = 0; i<arr.length; i++) {
        if(fun(arr[i])) passed.push(arr[i]);
    }
    return passed;
}

console.log(schwestern);

var jungspund = filter(schwestern, function(person) {
    return person.born > 1990;
});

console.log("jungspung: ", jungspund);

result = JSON.stringify(denise);

//var newdenise = JSON.parse(denise);
var o = {};
o = JSON.parse(result);
//var obj = JSON.parse(result);
//console.log(obj);
console.log(denise.born);
console.log(o);
output.innerHTML = result;