'use strict'; var invalidEntries; function filterByID(element) { if (element.id && ('number' === typeof element.id)) { return true; } invalidEntries++; return false; } function filterByExtension(element) { if (element.path && ('string' === typeof element.path)) { var pathArr = element.path.split('.'); var extension = pathArr[pathArr.length - 1]; if (extension === 'txt') { return true; } } invalidEntries++; return false; } function sortByID(arr) { return arr.sort(function(first, second) { return (first.id - second.id); }); } var files = [{ id: 15, path: 'foo.txt' }, { id: 1, path: 'bar.1.txt' }, { id: 3, path: 'mine.txt' }, { id: 2, path: 'yours.txt' }, { id: 4, path: 'yours.txt.diff' }, { id: undefined, path: null }, { id: null, path: null }, { path: 'foo.bar.txt' }]; (function(files) { invalidEntries = 0; var sortedAndFilterededArr = files .filter(filterByID) .filter(filterByExtension) .sort(function(first, second) { return first.id - second.id; }); console.log('Number of Invalid Entries = ', invalidEntries); // 7 console.log('Filtered And Sorted Array \n', sortedAndFilterededArr); /* [ {id: 1, path:'bar.1.txt'}, {id: 2, path:'yours.txt'}, {id: 3, path:'mine.txt'}, {id: 15, path:'foo.txt'} ]; */ })(files);