script.js 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355
  1. let a = {
  2. name: 'Vlad',
  3. surname: 'Marchenko',
  4. } //3 persons
  5. let b = {
  6. name: 'Vitalii',
  7. surname: 'Marchenko',
  8. } //3 persons
  9. let c = {
  10. name: 'Dmitruy',
  11. surname: 'Mitrohin',
  12. } //3 persons
  13. function differentFields() {
  14. console.log('different fields');
  15. a.age = 30;
  16. b.fathername = 'Ivanov';
  17. c.sex = 'male';
  18. } // different fields
  19. function fieldsCheck() {
  20. differentFields();
  21. console.log('fields check');
  22. if ('age' in a) {
  23. console.log(a.age);
  24. }
  25. if (typeof b['fathername'] !== "undefined") {
  26. console.log(b.fathername);
  27. }
  28. } // fields check
  29. function arrayOfPersons() {
  30. fieldsCheck();
  31. console.log('array of persons');
  32. let person = [{...a}, {...b}, {...c}, {name: 'Alex', surname: 'Reznichenko', fathername: 'God'}];
  33. console.log(person);
  34. return person;
  35. } // array of persons
  36. function loopOfPersons() {
  37. let person = arrayOfPersons();
  38. console.log('loop of persons');
  39. for (let item of person) {
  40. console.log(item);
  41. }
  42. } // loop of persons
  43. function loopOfNameAndSurname() {
  44. let person = arrayOfPersons();
  45. console.log('loop of name and surname');
  46. for (let {...obj} of person) {
  47. if('name' in obj && 'surname' in obj) {
  48. console.log(obj['name'], obj['surname']);
  49. }
  50. }
  51. } // loop of name and surname
  52. function loopOfLoopOfValues() {
  53. let person = arrayOfPersons();
  54. console.log('loop of loop of values');
  55. for (let i = 0; i < person.length; i++) {
  56. for (let key in person[i]) {
  57. console.log(person[i][key]);
  58. }
  59. }
  60. } // loop of loop of values
  61. function fullName() {
  62. let person = arrayOfPersons();
  63. console.log('fullName');
  64. person.forEach(item => {
  65. if('name' in item && 'surname' in item && 'fathername' in item){
  66. item.fullName = `${item['name']} ${item['surname']} ${item['fathername']}`;
  67. }
  68. });
  69. console.log(person);
  70. return person;
  71. } // fullName
  72. function serialize() {
  73. let person = fullName();
  74. console.log('serialize');
  75. let str = JSON.stringify(person, null, 4)
  76. console.log(str);
  77. return str;
  78. } // serialize
  79. function deserialize() {
  80. let str = serialize();
  81. let person = fullName();
  82. console.log('deserialize');
  83. let betweenArr = JSON.parse(str);
  84. for (let betweenArrElement of betweenArr) {
  85. person.push(betweenArrElement);
  86. break;
  87. }
  88. console.log('Final array', person);
  89. return person;
  90. } // deserialize
  91. // loopOfPersons(); // вывод всего массива persons
  92. // loopOfNameAndSurname(); // вывод имени и фамилии массива persons
  93. // loopOfLoopOfValues(); // вывод значений из массива объектов
  94. // все функции связаны между собой (получают значения по цепочке), вызывать в порядке расположения
  95. //******************HTML*******************//
  96. function html() {
  97. let finalArr = deserialize();
  98. let str = "<table border='1'>"
  99. for (let {...obj} of finalArr) {
  100. str += '<tr>';
  101. for (const objKey in obj) {
  102. str += `<td>${objKey}</td><td>${obj[objKey]}</td>`;
  103. }
  104. str += '</tr>';
  105. }
  106. str += "</table>"
  107. console.log(str);
  108. document.write(str);
  109. } // HTML
  110. function htmlOptionalFields() {
  111. let finalArr = deserialize();
  112. let arrTh = [];
  113. let str = "<table border='1'>"
  114. str += '<tr>';
  115. for (let {...obj} of finalArr) {
  116. for (const objKey in obj) {
  117. if (str.includes(objKey)) continue;
  118. str += `<th>${objKey}</th>`;
  119. arrTh.push(objKey);
  120. }
  121. }
  122. str += '</tr>';
  123. let arrMiddle = [];
  124. for (let {...obj} of finalArr) {
  125. for (const objKey in obj) {
  126. arrMiddle[arrTh.indexOf(objKey)] = obj[objKey];
  127. }
  128. str += `<tr>`;
  129. for (let i = 0; i < arrTh.length; i++) {
  130. if (arrMiddle[i] === undefined){
  131. str += `<td></td>`
  132. }
  133. else{
  134. str += `<td>${arrMiddle[i]}</td>`
  135. }
  136. }
  137. str += `</tr>`;
  138. }
  139. str += "</table>"
  140. console.log(str);
  141. document.write(str);
  142. } // HTML optional fields
  143. function htmlTrColor() {
  144. let finalArr = deserialize();
  145. let arrTh = [];
  146. let str = "<table border='1'>"
  147. str += '<tr>';
  148. for (let {...obj} of finalArr) {
  149. for (const objKey in obj) {
  150. if (str.includes(objKey)) continue;
  151. str += `<th>${objKey}</th>`;
  152. arrTh.push(objKey);
  153. }
  154. }
  155. str += '</tr>';
  156. let counter = 0;
  157. let arrMiddle = [];
  158. for (let {...obj} of finalArr) {
  159. for (const objKey in obj) {
  160. arrMiddle[arrTh.indexOf(objKey)] = obj[objKey];
  161. }
  162. counter++;
  163. if (counter % 2 === 0){
  164. str += `<tr style="background-color: #868585">`;
  165. }
  166. else
  167. {
  168. str += `<tr>`;
  169. }
  170. for (let i = 0; i < arrTh.length; i++) {
  171. if (arrMiddle[i] === undefined){
  172. str += `<td></td>`
  173. }
  174. else{
  175. str += `<td>${arrMiddle[i]}</td>`
  176. }
  177. }
  178. str += `</tr>`;
  179. }
  180. str += "</table>"
  181. console.log(str);
  182. document.write(str);
  183. } // HTML tr color
  184. function htmlThOptional() {
  185. let finalArr = deserialize();
  186. let arrTh = [];
  187. let str = "<table border='1'>"
  188. str += '<tr>';
  189. for (let {...obj} of finalArr) {
  190. for (const objKey in obj) {
  191. if (str.includes(objKey)) continue;
  192. str += `<th>${objKey}</th>`;
  193. arrTh.push(objKey);
  194. }
  195. }
  196. str += '</tr>';
  197. let counter = 0;
  198. let arrMiddle = [];
  199. for (let {...obj} of finalArr) {
  200. for (const objKey in obj) {
  201. arrMiddle[arrTh.indexOf(objKey)] = obj[objKey];
  202. }
  203. counter++;
  204. if (counter % 2 === 0){
  205. str += `<tr style="background-color: #868585">`;
  206. }
  207. else
  208. {
  209. str += `<tr>`;
  210. }
  211. for (let i = 0; i < arrTh.length; i++) {
  212. if (arrMiddle[i] === undefined){
  213. str += `<td></td>`
  214. }
  215. else{
  216. str += `<td>${arrMiddle[i]}</td>`
  217. }
  218. }
  219. str += `</tr>`;
  220. }
  221. str += "</table>"
  222. console.log(str);
  223. document.write(str);
  224. } // HTML th optional
  225. //html(); // простой вывод массива в html
  226. //htmlOptionalFields(); // вывод масива по колонкам
  227. //htmlTrColor(); // вывод масива по колонкам + цвет
  228. //htmlThOptional(); // вывод масива по колонкам
  229. function blueBelt(someTree, str = '') {
  230. if ('tagName' in someTree) {
  231. if ('attrs' in someTree) {
  232. let artStr = '';
  233. for (const atr in someTree['attrs']) {
  234. artStr += `${atr}: ${someTree['attrs'][atr]};`;
  235. }
  236. str += `<${someTree['tagName']} style=\"${artStr}\">`;
  237. }
  238. else{
  239. str += `<${someTree['tagName']}>`;
  240. }
  241. }
  242. if ('text' in someTree) {
  243. str += `${someTree['text']}`;
  244. }
  245. if ('subTags' in someTree) {
  246. for (let i = 0; i < someTree['subTags'].length; i++) {
  247. str = blueBelt(someTree['subTags'][i], str);
  248. }
  249. }
  250. str += `</${someTree['tagName']}>`;
  251. return str;
  252. } // задание на синий пояс
  253. let someTree = {
  254. tagName: "table", //html tag
  255. subTags: [ //вложенные тэги
  256. {
  257. tagName: "tr",
  258. subTags: [
  259. {
  260. tagName: "td",
  261. text: "some text",
  262. },
  263. {
  264. tagName: "td",
  265. text: "some text 2",
  266. }
  267. ]
  268. }
  269. ],
  270. attrs:
  271. {
  272. border: 1,
  273. margin: 10,
  274. padding: 1,
  275. },
  276. } // тестовые данные для задания на синий пояс
  277. //console.log(blueBelt(someTree)); // вызов задания на синий пояс
  278. function destructArray() {
  279. let arr = [1,2,3,4,5, "a", "b", "c"];
  280. let [odd1, even1, odd2, even2, odd3, ...str] = arr;
  281. console.log(odd1, even1, odd2, even2, odd3, str);
  282. } // destruct array
  283. function destructString() {
  284. let arr = [1, "abc"];
  285. let [number, [s1, s2, s3]] = arr;
  286. console.log(number, s1, s2, s3);
  287. } // destruct string
  288. function destruct2() {
  289. let obj = {
  290. name: 'Ivan',
  291. surname: 'Petrov',
  292. children: [
  293. {name: 'Maria'},
  294. {name: 'Nikolay'}
  295. ]
  296. }
  297. let [{name: name1}, {name: name2}] = obj.children;
  298. console.log(name1, name2);
  299. } // destruct 2
  300. function destruct3() {
  301. let arr = [1,2,3,4, 5,6,7,10];
  302. let {0:a, 1:b, length} = arr;
  303. console.log(a, b, length);
  304. } // destruct 3
  305. //destructArray();
  306. //destructString();
  307. //destruct2();
  308. //destruct3();
  309. function blackBelt() {
  310. let history = [1, 1, 1, 1];
  311. let predictArray = [];
  312. predictArray[0] = [];
  313. predictArray[0][0] = [];
  314. predictArray[0][0][0] = [];
  315. predictArray[0][0][0][0] = [];
  316. let userValue = 0;
  317. for (let i = 0; true; i++){
  318. if (i === 0){
  319. console.log(Math.round(Math.random()));
  320. userValue = +prompt('Введите число от 0 до 1', '0');
  321. if (userValue < 0 || userValue > 1 || isNaN(userValue)){
  322. alert('Вы ввели не верное значение');
  323. continue;
  324. }
  325. predictArray[history[0]][history[1]][history[2]][history[3]] = userValue;
  326. history.push(userValue);
  327. history.shift();
  328. }
  329. else {
  330. console.log(predictArray);
  331. userValue = +prompt('Введите число от 0 до 1', '0');
  332. if (userValue < 0 || userValue > 1 || isNaN(userValue)){
  333. alert('Вы ввели не верное значение');
  334. continue;
  335. }
  336. predictArray[history[0]][history[1]][history[2]][history[3]] = userValue;
  337. history.push(userValue);
  338. history.shift();
  339. }
  340. }
  341. } // задание на черный пояс TODO не доделал