script.js 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203
  1. //Домашнее задание. Функции 2, ES6
  2. let persons = [
  3. {name: "Иван", age: 17},
  4. {name: "Мария", age: 35},
  5. {name: "Алексей", age: 73},
  6. {name: "Яков", age: 12},
  7. ]
  8. function sort(array, sortString, bool = 'true') {
  9. if(bool){
  10. array.sort( (a, b) => {
  11. if (a[sortString] > b[sortString]) {
  12. return 1;
  13. }
  14. if (a[sortString] < b[sortString]) {
  15. return -1;
  16. }
  17. return 0;
  18. });
  19. } else {
  20. array.sort( (a, b) => {
  21. if (b[sortString] > a[sortString]) {
  22. return 1;
  23. }
  24. if (b[sortString] < a[sortString]) {
  25. return -1;
  26. }
  27. return 0;
  28. });
  29. }
  30. return array;
  31. };
  32. //sort(persons, "age", false);
  33. //сортирует по возрасту по возрастанию
  34. //console.log(persons)
  35. //sort(persons, "name", false); //сортирует по имени по убыванию
  36. //console.log(persons);
  37. //array map
  38. /* Используя Array.map приведите все строки в массиве к числу.
  39. Элементы других типов оставьте как есть:
  40. ["1", {}, null, undefined, "500", 700]
  41. должно превратиться в
  42. [1, {}, null, undefined, 500, 700] */
  43. let array = ["1", {}, null, undefined, "500", 700, 'fdg'];
  44. let newArray = array.map((item) => {
  45. if(typeof(item) ==='string' && !isNaN(+item)){
  46. return + item;
  47. } else return item;
  48. });
  49. //console.log(newArray);
  50. //array reduce
  51. /* Получите произведение всех чисел в массиве,
  52. используя Array.reduce.
  53. Не обрабатывайте типы данных, не являющиеся числом.
  54. результат должен быть 15 */
  55. let redArray = ["0", 5, 3, "string", null];
  56. let multyArray = redArray.reduce((accum, item) => {
  57. if(typeof(item) ==='number' && typeof(accum) ==='number'){
  58. return accum * item;
  59. } else return accum;
  60. }, 1);
  61. //console.log(multyArray);
  62. /* object filter
  63. Напишите свою реализацию Array.filter для объектов:
  64. filter(phone,(key,value) => key == "color" || value == 2);
  65. должно вернуть
  66. {
  67. ram: 2,
  68. color: "black",
  69. }
  70. Для удаления пары ключ-значение используйте delete. Или сделайте копию объекта.
  71. "Напишите свою реализацию" значит написать function filter.... и её тело, после чего код выше заработает */
  72. let phone = {
  73. brand: "meizu",
  74. model: "m2",
  75. ram: 2,
  76. color: "black",
  77. };
  78. let filterFunc = (key,value) => key == "color" || value == 2;
  79. function filter(obj, func) {
  80. for(let key in obj){
  81. let validator = func(key, obj[key]);
  82. if(!validator){
  83. delete obj[key];
  84. }
  85. }
  86. return obj;
  87. }
  88. let newArray1 = filter(phone,(key,value) => key == "color" || value == 2);
  89. //console.log(newArray1);
  90. //console.log(phone);
  91. /* object map
  92. Напишите свою реализацию Array.map для объектов:
  93. map({name: "Иван", age: 17},
  94. function(key,value){
  95. var result = {};
  96. result[key+"_"] = value + "$";
  97. return result;
  98. })
  99. //должен вернуть {name_: "Иван$", age_: "17$"}
  100. "Напишите свою реализацию" значит написать function map.... и её тело, после чего код выше заработает */
  101. function objMap (obj, func){
  102. for(let key in obj){
  103. return func(key, obj[key]);
  104. }
  105. }
  106. let newArra2 = objMap({name: "Иван", age: 17},
  107. function(key,value){
  108. let result = {};
  109. result[key+"_"] = value + "$";
  110. return result;
  111. })
  112. //console.log(newArra2);
  113. /* Рекурсия
  114. Sum
  115. Напишите функцию, который будет считать сумму арифметической прогрессии рекурсивно.
  116. */
  117. function sum(num){
  118. if ( num == 0) return 0;
  119. if (num < 1) return num + sum(num + 1); // maybe
  120. if ( num == 1) return 1;
  121. return num + sum(num - 1);
  122. }
  123. //console.log(sum(5));
  124. //console.log(sum(-3));
  125. //**************************************************************//
  126. //HTML Tree
  127. //Сделать задание на синий пояс, используя рекурсию, без ограничения вложенности.
  128. let someTree = {
  129. tagName: "table", //html tag
  130. children: [ //вложенные тэги
  131. {
  132. tagName: "tr",
  133. children: [
  134. {
  135. tagName: "td",
  136. text: "some text",
  137. },
  138. {
  139. tagName: "td",
  140. text: "some text 2",
  141. }
  142. ]
  143. }
  144. ],
  145. attrs:
  146. {
  147. border: 1,
  148. },
  149. }
  150. let body= '';
  151. function htmlRecConstructor (obj) {
  152. let {tagName, children, attrs, text} = obj;
  153. let atribute, value;
  154. if (attrs){
  155. atribute = Object.keys(attrs);
  156. value = Object.values(attrs);
  157. } else atribute = '';
  158. body +=`<${tagName} ${atribute}=${value}>`;
  159. if (typeof children ==="object"){
  160. for (let tag of children){
  161. htmlRecConstructor(tag);
  162. }
  163. } else body +=`${text}`;
  164. body +=`<${tagName}>`;
  165. return body;
  166. };
  167. htmlRecConstructor(someTree);
  168. document.write(body);