//Домашнее задание. Функции 2, ES6 let persons = [ {name: "Иван", age: 17}, {name: "Мария", age: 35}, {name: "Алексей", age: 73}, {name: "Яков", age: 12}, ] function sort(array, sortString, bool = 'true') { if(bool){ array.sort( (a, b) => { if (a[sortString] > b[sortString]) { return 1; } if (a[sortString] < b[sortString]) { return -1; } return 0; }); } else { array.sort( (a, b) => { if (b[sortString] > a[sortString]) { return 1; } if (b[sortString] < a[sortString]) { return -1; } return 0; }); } return array; }; //sort(persons, "age", false); //сортирует по возрасту по возрастанию //console.log(persons) //sort(persons, "name", false); //сортирует по имени по убыванию //console.log(persons); //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, }, } let body= ''; function htmlRecConstructor (obj) { let {tagName, children, attrs, text} = obj; let atribute, value; if (attrs){ atribute = Object.keys(attrs); value = Object.values(attrs); } else atribute = ''; body +=`<${tagName} ${atribute}=${value}>`; if (typeof children ==="object"){ for (let tag of children){ htmlRecConstructor(tag); } } else body +=`${text}`; body +=`<${tagName}>`; return body; }; htmlRecConstructor(someTree); document.write(body);