//sort let persons = [ {name: "Иван", age: 17}, {name: "Мария", age: 35}, {name: "Алексей", age: 73}, {name: "Яков", age: 12}, {name: "Яков", age: 1132}, {name: "Яков", age: 22}, {name: "Яков", age: 142}, ] function arrsort(arr, prop, incline=true) { if (arr.length < 2) { return arr } let mid = Math.floor(arr.length / 2) let equ = arr.filter(value => value[prop] === arr[mid][prop]) let more = incline? arr.filter(value => value[prop] > arr[mid][prop]) : (arr.filter(value => value[prop] < arr[mid][prop])).reverse() let less = incline? arr.filter(value => value[prop] < arr[mid][prop]) : (arr.filter(value => value[prop] > arr[mid][prop])).reverse() return [...arrsort(less, prop, incline), ...equ, ...arrsort(more, prop, incline)] } console.log(arrsort(persons, 'age', false)) //array map let mapped = ["1", {}, null, undefined, "500", 700].map((elem) => { return isNaN(elem) || typeof elem === 'object'? elem : +elem }) console.log(mapped) //array reduce let reduced = ["0", 5, 3, "string", null, 2, 100].reduce((prev, curr)=> { let sum = typeof prev === 'number'? prev : 1 let isPresent = false; (function() { isPresent = typeof prev === 'number' || typeof curr === 'number'? true : false if(typeof curr === 'number') { sum = sum * curr } })(); return isPresent? sum : 0 }) console.log(reduced) //object filter let phone = { brand: "meizu", model: "m2", ram: 2, color: "black", }; function objectFilter(obj, f) { let filtered = {} for(let key in obj) { if(f(key, obj[key])) { filtered[key] = obj[key] } } return filtered } let filtered = objectFilter(phone, (key, value) => key === 'model' || value === 'black') console.log(filtered) //object map function objectMap(object, f) { let mapped = {} for(let key in object) { let temp = f(key, object[key]) for(let prop in temp) { console.log('biba',prop, temp[prop]) mapped[prop] = temp[prop] } } return mapped } console.log(objectMap({name: "Иван", age: 17}, function(key,value){ var result = {}; result[key+"_"] = value + "$"; console.log('ras', result) return result; })) //sum function sum(initial, step, members) { var res = initial var memb = members if(memb === 0) { return res } else { return sum(res + step, step, memb-1) } } console.log('sum', sum(5, 3, 10)) //HTML Tree // blue belt class Markup { constructor(tagName, [...nestedTags]=[], {...attrs}={}, text='') { this.tagName = tagName, this.attrs = attrs this.text = text this.nestedTags = nestedTags } } let md3 = new Markup( 'table', [ new Markup( 'tr', [ new Markup( 'td', undefined, {disabled:true}, 'some text' ), new Markup( 'td', undefined, undefined, 'some text2' ) ] ), new Markup( 'tr', [ new Markup( 'td', [ new Markup( 'div', [ new Markup( 'p', undefined, {disabled:true}, 'some textp' ), new Markup( 'p', undefined, {style:'font-weight:800;color:red'}, 'some textp' ) ] ) ], {style:'background-color:purple;color:white;'}, 'some text div' ), new Markup( 'td', undefined, {class:'someclass'}, 'some text4' ) ] ) ], {border: 1, style:"color:'red';"} ) function stringifyMdObject(Md_obj) { let str = '' for(let key in Md_obj) { if(key === 'tagName') { str += `<${Md_obj[key]}` if(Md_obj.attrs.length !== 0) { continue; } else { str += `>` } } if(key === 'nestedTags') { for(let i = 0; i < Md_obj[key].length; i++) { str += stringifyMdObject(Md_obj[key][i]) } } if(key === 'attrs' && Md_obj[key].length !== 0) { for(let i in Md_obj.attrs) { str += ` ${i}="${Md_obj.attrs[i]}"` } str += `>` } } str += `${Md_obj.text}` str += `` return str } document.write(stringifyMdObject(new Markup('h2',[new Markup('span',undefined,{style:'color:blue;'},'Blue ')],undefined,'belt'))) document.write(stringifyMdObject(md3))