Get Prev/Next Picture
Iterate through an array and find the item that matches the one before a condition
by Patrick Hund
JavaScript
const pictures = [
{ id: 453, url: 'foo' },
{ id: 126, url: 'bar' },
{ id: 663, url: 'blub' },
{ id: 347, url: 'argh' },
{ id: 829, url: 'xyzzy' },
{ id: 993, url: 'bla' }
];
function getItem(list, condition, method = 'reduce') {
return list[method]((acc, curr) => condition(curr) ? { result: acc.result, done: true } : acc.done ? acc : { result: curr }, { result: null, done: false }).result;
}
const getPrevItem = (list, condition) => getItem(list, condition);
const getNextItem = (list, condition) => getItem(list, condition, 'reduceRight');
const getPrevPicture = id => getPrevItem(pictures, picture => picture.id === id);
const getNextPicture = id => getNextItem(pictures, picture => picture.id === id);
console.log('prev:', getPrevPicture(663));
console.log('next:', getNextPicture(663));