script.js 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212
  1. /* 1. Напишите функцию, которая возвращает массив,
  2. очищенный от пустых значений, не меняя исходный*/
  3. function clean (data) {
  4. var arr = [];
  5. data.filter(function(data, i, data) {
  6. function isEmpty(obj) {
  7. return JSON.stringify(obj) == "{}"; // функция для проверки объекта на "пустоту"
  8. }
  9. if (isEmpty(data[i]) === false && !Array.isArray(data[i]) && data[i] !== "")
  10. arr.push(data[i]);
  11. else {
  12. Array.isArray(data[i]) && data[i].length !== 0 || data[i] == null ? arr.push(data[i]) : false;
  13. }
  14. });
  15. return arr;
  16. }
  17. var data = [0, '0', 'ddd', null, '', {7: 7}, {}, ['ddd'], [], [1, 2, 3]];;
  18. console.log( clean(data) ); // [0, '0', 'ddd', null, {7: 7}, ['ddd'], [1, 2, 3]]
  19. /* 2. Напишите функцию-аналог splice, не используя никакие методы массива.*/
  20. function splice (data, index, number) {
  21. if ( arguments.length === 3 ) {
  22. var arr = [];
  23. for (var j = 0, k = -1; j < number; (index++) && (j++) ) {
  24. k++;
  25. arr[k] = data[index];
  26. data[index] = data[index+number];
  27. }
  28. data.length = ( data.length - number );
  29. return arr;
  30. }
  31. else if ( arguments.length > 3 ) {
  32. var a = [];
  33. for (var l = 0; l < data.length; l++) {
  34. a[l] = data[l];
  35. }
  36. var i = 0;
  37. for (var m = 3; m < arguments.length; (m++) && (i++)) {
  38. data[index+i] = arguments[m];
  39. }
  40. for (var h = ( index + number ); h < a.length; (h++) && (i++)) {
  41. data[index+i] = a[h];
  42. }
  43. }
  44. return arr;
  45. }
  46. var arr = [1, 2, 4, 3];
  47. console.log(splice(arr, 2, 1)); // [4]
  48. console.log(arr); // [1, 2, 3]
  49. splice(arr, 2, 0, 100, 200, 300); // []
  50. console.log(arr); // [1, 2, 100, 200, 300, 3]
  51. /* 3. Напишите функцию, которая возвращает сумму всех чисел,
  52. переданных в качестве аргументов, число которых не ограничено.
  53. Функция работает только с числами (включая строковые).
  54. Если какой-то из параметров - массив, то к сумме добавляется также сумма значений
  55. этого массива (если какое-либо из значений этого массива также является массивом,
  56. то к результату добавляется также и сумма его значений, и так далее).*/
  57. function getSum() {
  58. var sum = 0;
  59. for (var i = 0; i < arguments.length; i++) {
  60. if (typeof arguments[i] === 'object' ) {
  61. sum += getSum.apply(null, arguments[i]);
  62. }
  63. else if (!isNaN(arguments[i])) sum += +arguments[i];
  64. }
  65. return sum;
  66. }
  67. var sum = getSum(1, '1', 'one', {4: 3}, [2, '2', 'two']);
  68. console.log( sum ); // 6
  69. /* 4. Напишите функцию, которая рисует в указанном HTML-контейнере
  70. диаграмму из данных, представляющих из себя массив объектов:
  71. каждый объект имеет свойства color и value, означающих соответственно
  72. цвет столбца и его высоту.*/
  73. function buildDiagram (data, diagram) {
  74. var section = '<section class='+diagram+'>';
  75. $('body').append(section);
  76. $('section.'+diagram).css ({
  77. 'display': 'flex',
  78. 'align-items': 'flex-start',
  79. 'flex-wrap': 'wrap-reverse',
  80. 'overflow': 'auto',
  81. 'text-align': 'center',
  82. 'width': '60%',
  83. 'height': '300px',
  84. 'margin': '20px auto',
  85. 'padding': '20px',
  86. 'border': '1px solid black',
  87. 'align-content': 'center',
  88. 'justify-content': 'center',
  89. 'background': 'rgba(74, 67, 67, 0.14)'
  90. });
  91. data.forEach (function(box, i, data) {
  92. $('section.'+diagram).append('<div class='+i+'> <span>'+data[i].value+'% </span> </div>');
  93. $('section.'+diagram +' div.'+i).css ({
  94. 'height': data[i].value+'%',
  95. 'width': '80px',
  96. 'background': data[i].color
  97. });
  98. $('section span').css ({
  99. 'bottom': '18px',
  100. 'position': 'relative',
  101. 'font-family': 'arial'
  102. });
  103. });
  104. }
  105. var data1 = [ {color: '#DE9797', value: 60},{color: 'yellow', value: 50}];
  106. buildDiagram(data1, 'diagram1');
  107. var data2 = [ {color: '#97DEDA', value: 20}, {color: 'red', value: 100},
  108. {color: 'orange', value: 10}, {color: 'yellow', value: 50},
  109. {color: 'blue', value: 52.5}, {color: 'purple', value: 35}];
  110. buildDiagram(data2, 'diagram2');
  111. /*5. Напишите функцию, которая изображает
  112. в теге HTML картинку по данным, представляющим из
  113. себя двумерный массив закрашенных точек.*/
  114. function draw(points) {
  115. var table = $('<table>').appendTo('body');
  116. var maxLength = 0;
  117. points.forEach(function(item) {
  118. var point = Math.max.apply(null, item); // находим максимальную длину строки в 2-мерном массиве
  119. if (point > maxLength) maxLength = point;
  120. });
  121. for (var j = 0; j < points.length; j++) {
  122. var tr = $('<tr>').appendTo(table);
  123. }
  124. for (var i = 0; i < maxLength; i++) {
  125. $('<td>').appendTo('tr');
  126. }
  127. $(table).css({
  128. 'border-collapse': 'collapse',
  129. 'text-align': 'center',
  130. 'position': 'relative',
  131. 'top': '20px',
  132. 'margin': '0px auto',
  133. 'align-content': 'center',
  134. 'justify-content': 'center'
  135. })
  136. $("td").css({
  137. 'width': '30px',
  138. 'height': '30px',
  139. 'border': '1px solid black'
  140. })
  141. for (var k = 0; k < points.length; k++) {
  142. for (var l = 0; l < points[k].length; l++) {
  143. $('tr:eq(' + k +') td:eq(' + (points[k][l]-1) + ')').css({
  144. 'background': 'black'})
  145. }
  146. }
  147. }
  148. var points = [
  149. [3, 4, 5],
  150. [2, 3, 9, 16],
  151. [1, 2, 9, 10, 15, 16],
  152. [1, 2, 5, 6, 9, 10, 11, 12, 13, 14, 15, 16],
  153. [1, 2, 4, 5, 6, 7, 9, 12, 13, 16],
  154. [1, 2, 3, 4, 5, 6, 7, 8, 9, 12, 13, 16],
  155. [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 14, 15, 16],
  156. [2, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13, 14, 15],
  157. [2, 3, 4, 7, 8, 12, 13],
  158. [2, 3, 7, 8],
  159. [2, 3, 4, 5, 7, 8, 9],
  160. [2, 3, 4, 5, 7, 8, 9],
  161. ];
  162. draw (points);