fork download
  1. var data = [
  2. {'city': 'Джакарта', 'country': 'Индонезия', 'population': 30539, 'area': 3225, 'density': 9500 },
  3. {'city': 'Каир', 'country': 'Египет', 'population': 25600, 'area': 1761, 'density': 15105 },
  4. {'city': 'Карачи', 'country': 'Пакистан', 'population': 25423, 'area': 945, 'density': 26902 },
  5. {'city': 'Токио', 'country': 'Япония', 'population': 37843, 'area': 8547, 'density': 4400 },
  6. ];
  7.  
  8. function sortTable(sortByField, sortType, limit) {
  9. var result = data.sort(getSortCallbackFor(sortByField, sortType));
  10.  
  11. if (!Number.isInteger(limit) || limit < 0) {
  12. return result;
  13. }
  14.  
  15. return result.slice(0, limit);
  16. }
  17.  
  18. function getSortCallbackFor(field, order) {
  19. var resultCallback;
  20. if (['city', 'country'].indexOf(field) >= 0) {
  21. if (order === 'ASC') {
  22. resultCallback = function(a, b) {
  23. return a[field].localeCompare(b[field]);
  24. }
  25. } else if (order === 'DESC') {
  26. resultCallback = function(a, b) {
  27. return b[field].localeCompare(a[field]);
  28. }
  29. } else {
  30. throw new Error('Invalid order');
  31. }
  32. } else if (['population', 'area', 'density'].indexOf(field) >= 0) {
  33. if (order === 'ASC') {
  34. resultCallback = function(a, b) {
  35. return a[field] - b[field];
  36. }
  37. } else if (order === 'DESC') {
  38. resultCallback = function(a, b) {
  39. return b[field] - a[field];
  40. }
  41. } else {
  42. throw new Error('Invalid order');
  43. }
  44. } else {
  45. throw new Error('Invalid field');
  46. }
  47.  
  48. return resultCallback;
  49. }
  50.  
  51. // Тесты
  52. var tableSorted1 = sortTable('population', 'DESC', 3);
  53. console.log(tableSorted1.length === 3);
  54. console.log(tableSorted1[0].city === 'Токио');
  55. console.log(tableSorted1[1].city === 'Джакарта');
  56. console.log(tableSorted1[2].city === 'Каир');
  57.  
  58. var tableSorted2 = sortTable('country', 'ASC');
  59. console.log(tableSorted2.length === 4);
  60. console.log(tableSorted2[0].country === 'Египет');
  61. console.log(tableSorted2[1].country === 'Индонезия');
  62. console.log(tableSorted2[2].country === 'Пакистан');
  63. console.log(tableSorted2[3].country === 'Япония');
  64.  
Success #stdin #stdout 0.06s 21168KB
stdin
Standard input is empty
stdout
true
true
true
true
true
true
true
true
true