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
})