Bladeren bron

finish functions 2 hw

serg155alternate 2 jaren geleden
bovenliggende
commit
02a55fe1fb
1 gewijzigde bestanden met toevoegingen van 163 en 5 verwijderingen
  1. 163 5
      HW8 Functioms 2/script.js

+ 163 - 5
HW8 Functioms 2/script.js

@@ -31,11 +31,169 @@ function sort(array, sortString, bool = 'true') {
     return array;
 };
 
-sort(persons, "age", false); 
+//sort(persons, "age", false); 
 //сортирует по возрасту по возрастанию
-console.log(persons)
-sort(persons, "name", false); //сортирует по имени по убыванию
-console.log(persons)
+//console.log(persons)
+//sort(persons, "name", false); //сортирует по имени по убыванию
+//console.log(persons);
 
 //array map
-//Используя Array.map приведите все строки в массиве к числу. Элементы других типов оставьте как есть://
+
+/* Используя Array.map приведите все строки в массиве к числу. 
+Элементы других типов оставьте как есть:
+["1", {}, null, undefined, "500", 700]
+должно превратиться в
+[1, {}, null, undefined, 500, 700] */
+
+let array = ["1", {}, null, undefined, "500", 700, 'fdg'];
+
+let newArray = array.map((item) => {
+    if(typeof(item) ==='string' && !isNaN(+item)){
+      return + item;
+    } else return item;
+});
+
+//console.log(newArray);
+
+//array reduce
+/* Получите произведение всех чисел в массиве, 
+используя Array.reduce. 
+Не обрабатывайте типы данных, не являющиеся числом.
+
+результат должен быть 15 */
+
+let redArray = ["0", 5, 3, "string", null];
+
+let multyArray = redArray.reduce((accum, item) => {
+    if(typeof(item) ==='number' && typeof(accum) ==='number'){
+        return accum * item;
+    } else return accum;
+}, 1);
+
+//console.log(multyArray);
+
+
+/* object filter
+Напишите свою реализацию Array.filter для объектов:
+filter(phone,(key,value) => key == "color" || value == 2);
+должно вернуть
+{
+    ram: 2,
+    color: "black",
+}
+Для удаления пары ключ-значение используйте delete. Или сделайте копию объекта.
+"Напишите свою реализацию" значит написать function filter.... и её тело, после чего код выше заработает */
+
+let phone = {
+    brand: "meizu",
+    model: "m2",
+    ram: 2,
+    color: "black",
+};
+
+let filterFunc = (key,value) => key == "color" || value == 2;
+
+function filter(obj, func) {
+    for(let key in obj){
+        let validator = func(key, obj[key]);
+        if(!validator){
+            delete obj[key];
+        }  
+    }
+    return obj;
+}
+let newArray1 = filter(phone,(key,value) => key == "color" || value == 2);
+//console.log(newArray1);
+//console.log(phone);
+
+/* object map
+Напишите свою реализацию Array.map для объектов:
+
+map({name: "Иван", age: 17},
+function(key,value){
+    var result = {};
+    result[key+"_"] = value + "$";
+    return result;
+}) 
+//должен вернуть {name_: "Иван$", age_: "17$"}
+"Напишите свою реализацию" значит написать function map.... и её тело, после чего код выше заработает */
+
+
+
+function objMap (obj, func){
+    for(let key in obj){
+        return func(key, obj[key]);
+    }
+}
+
+let newArra2 = objMap({name: "Иван", age: 17},
+
+function(key,value){
+    let result = {};
+    result[key+"_"] = value + "$";
+    return result;
+}) 
+
+
+//console.log(newArra2);
+
+/* Рекурсия
+Sum
+Напишите функцию, который будет считать сумму арифметической прогрессии рекурсивно.
+*/
+
+function sum(num){
+    if ( num == 0) return 0;
+    if (num < 1) return  num + sum(num + 1); // maybe 
+    if ( num == 1) return 1;
+    return num + sum(num - 1);
+}
+//console.log(sum(5));
+//console.log(sum(-3));
+
+
+
+
+//**************************************************************//
+//HTML Tree
+//Сделать задание на синий пояс, используя рекурсию, без ограничения вложенности.
+
+let someTree = {
+    tagName: "table", //html tag
+    children: [ //вложенные тэги
+        {
+                    tagName: "tr",
+                    children: [
+                        {
+                            tagName: "td",
+                            text: "some text",
+                        },
+                        {
+                            tagName: "td",
+                            text: "some text 2",
+                        }
+                    ]
+        }
+    ],
+    attrs: 
+    {
+        border: 1,
+    },
+}
+
+function htmlRecConstructor (obj) {
+    let {tagName, children, attrs, text} = obj;
+    let  body = `<${tagName} ${Object.keys(attrs)} = ${Object.values(attrs)}>`; 
+  /*   for (let key in obj) { 
+        body += `<${tagName}>`; 
+        console.log(typeof children);
+        if (typeof children == 'object') { 
+            // htmlRecConstructor(obj)                      
+        } 
+        
+    } */
+    body +=`</${tagName}>` 
+    document.write(body);      
+  //console.log(body);   
+};  
+htmlRecConstructor(someTree) ;