function getItemsByMemberName(memberName) {
    return fetchData()
        .then(function(data) {
            return data.items
        })
        .then(function(items) {
            var results = []
            for (var i = 0; i < items.length; i++) {
                if (items[i].member === memberName) {
                    results.push(items[i])
                }
            }
            return results
        })
        .then(function(items) {
            return items.sort(function(first, second) {
                return first.date - second.date
            })
        })
}function getItemsByMemberName(memberName) {
    return fetchData()
        .then(get('items'))
        .then(filter(propMatches('member', memberName)))
        .then(sortBy(get('date')))
}function get(prop, obj) {
    return obj[prop]
}
function propMatches(prop, match, obj) {
    return obj[prop] === match
}
function filter(fn, arr) {
    return arr.filter(fn)
}
function sortBy(fn, arr) {
    return arr.sort(fn)
}*anecdotally
var x = 0
function calculateX() {
    x = 10
}
function useX() {
    if (x >= 10) {
        // ...
    }
}
// Don't write out instructions which rely on state
calculateX()
useX()function calculateX() {
    return 10
}
function useX(x) {
    if (x >= 10) {
        // ...
    }
}
// Pass values around instead
useX(calculateX())var arr = [1, 2, 3, 4]
var evens = []
var doubles = []
// Try to avoid imperative constructs
for (var i; i < arr.length; i++) {
    if (arr[i] % 2 === 0) {
        evens.push(arr[i])
    }
}
for (var i; i < arr.length; i++) {
    doubles.push(arr[i] * 2)
}var arr = [1, 2, 3, 4]
// Prefer functions like filter and map instead
var evens = arr.filter(function(x) {
    return x % 2 === 0
})
var doubles = arr.map(function(x) {
    return x * 2
})