|
@@ -0,0 +1,209 @@
|
|
|
+//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 += `</${Md_obj.tagName}>`
|
|
|
+
|
|
|
+ return str
|
|
|
+}
|
|
|
+
|
|
|
+document.write(stringifyMdObject(new Markup('h2',[new Markup('span',undefined,{style:'color:blue;'},'Blue ')],undefined,'belt')))
|
|
|
+document.write(stringifyMdObject(md3))
|