function es6() {
    // в прошлом задании я старался использовать es6
    // вот новые переделанные функции
    function sum3(a = 0, b = 0, c = 0) {
        return a + b + c;
    } // sum3
    function sum(...arr){
        return arr.reduce((a, b) => {
            return a + b;
        });
    } // sum
} // ES6

function sort(arr, key='age', boolean=true) {
    for (let j = arr.length-1; j > 0; j--) {
        for (let i = 0; i < j; i++) {
            if (boolean ? arr[i][key] > arr[i + 1][key]: arr[i][key] < arr[i + 1][key]) {
                let temp = arr[i];
                arr[i] = arr[i + 1];
                arr[i + 1] = temp;
            }
        }
    }
    return arr;
} // sort
let persons = [
    {name: "Иван", age: 17},
    {name: "Мария", age: 35},
    {name: "Алексей", age: 73},
    {name: "Яков", age: 12},
]; // данные для sort
console.log(sort(persons, "age",true)); // пример вызова sort

function arrayMap(arr) {
    return arr.map(item => {
        return (typeof item === 'string' ? +item : item) || item;
    });
} // array map
console.log(arrayMap(["1", {}, null, undefined, "500", 700])); // пример вызова array map

function arrayReduce(arr) {
    return arr.reduce((accum, item) => {
        return typeof(item) === "number" ? accum * item : accum * 1;
    }, 1);
} // array reduce
console.log(arrayReduce(["0", 5, 3, "string", null])); // пример вызова array reduce

function objectFilter(obj, func) {
    let result = {};
    for (let key in obj) {
        if (func(key, obj[key])) {
            result[key] = obj[[key]];
        }
    }
    return result;
} // object filter
let phone = {
    brand: "meizu",
    model: "m2",
    ram: 2,
    color: "black",
}; // данные для object filter
console.log(objectFilter(phone,(key, value) => key === "color" || value === 2)); // пример вызова object filter

function map(obj, func){
    let result = {};
    for (const key in obj) {
        result = Object.assign(result, func(key, obj[key]));
    }
    return result;
} // object map
console.log(map({name: "Иван", age: 17} ,function(key, value){
    let result = {};
    result[key+"_"] = value + "$";
    return result;
})); // пример вызова object map

// Рекурсия
function sums(n) {
    return (n === 1) ? n : n * sums(n-1);
} // Sum
console.log(sums(10)); // пример вызова Sum

function htmlTree(someTree, str = '') {
    if ('tagName' in someTree) {
        if ('attrs' in someTree) {
            let artStr = '';
            for (const atr in someTree['attrs']) {
                artStr += `${atr}: ${someTree['attrs'][atr]};`;
            }
            str += `<${someTree['tagName']} style=\"${artStr}\">`;
        }
        else{
            str += `<${someTree['tagName']}>`;
        }
    }
    if ('text' in someTree) {
        str += `${someTree['text']}`;
    }
    if ('subTags' in someTree) {
        for (let i = 0; i < someTree['subTags'].length; i++) {
            str = htmlTree(someTree['subTags'][i], str);
        }
    }
    str += `</${someTree['tagName']}>`;
    return str;
} // HTML Tree
let someTree = {
    tagName: "table", //html tag
    subTags: [ //вложенные тэги
        {
            tagName: "tr",
            subTags: [
                {
                    tagName: "td",
                    text: "some text",
                },
                {
                    tagName: "td",
                    text: "some text 2",
                }
            ]
        }
    ],
    attrs:
        {
            border: 1,
            margin: 10,
            padding: 1,
        },
} // тестовые данные для задания на синий пояс
console.log(htmlTree(someTree)); // вызов задания на синий пояс