Skip to content

Instantly share code, notes, and snippets.

View ins77's full-sized avatar

Дима Сухинин ins77

View GitHub Profile
@ins77
ins77 / patterns.js
Created April 25, 2020 11:18
patterns
// Определите зависимость «один ко многим» между объектами, чтобы при изменении состояния одного объекта все его иждивенцы уведомлялись и обновлялись автоматически.
// Используется когда изменение одного объекта требует изменения другого.
// class Product {
// constructor() {
// this.price = 0;
// this.observers = [];
// }
// subscribe(observer) {
@ins77
ins77 / add.js
Created April 25, 2020 11:18
add
const add = a => {
let sum = a;
const deepAdd = b => {
sum = sum + b;
return deepAdd;
}
deepAdd.valueOf = () => sum;
@ins77
ins77 / add.js
Created April 25, 2020 11:18
add
const add = a => {
let sum = a;
const deepAdd = b => {
sum = sum + b;
return deepAdd;
}
deepAdd.valueOf = () => sum;
@ins77
ins77 / curriedSum.js
Last active April 25, 2020 11:17
curriedSum
const sum = x => {
let result = x;
const innerSum = y => {
result = x + y;
return innerSum;
};
innerSum.valueOf = () => result;
@ins77
ins77 / getSumOfNaturalNumbers.js
Created April 25, 2020 11:16
getSumOfNaturalNumbers
const array = ['1', -9, null, -4, '3', 7, 8, NaN, undefined, 3, '-5', 2];
const getSumOfNaturalNumbers = (array) => {
const filteredArray = array.filter(item => !!item);
const mappedArray = filteredArray.map(Math.abs);
const minValue = Math.min(...mappedArray);
const maxValue = Math.max(...mappedArray);
const arrayWithoutMinAndMax = mappedArray.filter(item => item !== minValue && item !== maxValue);
return arrayWithoutMinAndMax.reduce((item, acc) => item + acc, 0);
@ins77
ins77 / alphabetize.js
Created April 25, 2020 11:16
alphabetize
// https://cs.stanford.edu/people/miles/iso8859.html
const alphabetized = (str) => {
const chars = str.split('');
const filteredChars = chars.filter(item => item.charCodeAt(item.indexOf(item)) <= 255);
const sortedChars = filteredChars.sort((a, b) => a.localeCompare(b, 'en-US-u-kf-upper'));
return sortedChars.join('').trim();
};
@ins77
ins77 / flat-flatmap.js
Created April 25, 2020 11:16
flat and flatMap
const flat = (arr, deep = 1) => {
let newArr = [];
for (let i = 0; i < arr.length; i++) {
const current = arr[i];
const canDeep = Array.isArray(current) && deep !== 0;
const element = canDeep ? flat(current, deep - 1) : [current];
// оптимизировать через guard expression
newArr = current !== '' ? [...newArr, ...element] : newArr;
@ins77
ins77 / flat.js
Created April 25, 2020 11:15
flat
let where = document.createElement('div');
let class1 = `class-1`;
let class2 = `class-1-3`;
let text1 = '123';
let text2 = 'abc!@#213';
let stat = {
tags: { P: 1, B: 2 },
classes: { [class1]: 2, [class2]: 1 },
texts: 3
};
@ins77
ins77 / fizzbuzz.js
Created April 25, 2020 11:14
fizzbuzz
const fizzbuzz = (begin, end) => {
for (let i = begin; i <= end; i++) {
const hasFizz = i % 3 === 0;
const hasBuzz = i % 5 === 0;
const fizz = hasFizz ? 'Fizz' : '';
const buzz = hasBuzz ? 'Buzz' : '';
console.log(hasFizz || hasBuzz ? `${fizz}${buzz}` : i);
}
};
const person = {
name: 'Владилен'
}
function info(phone, email) {
console.log(`Имя: ${this.name}, Тел.:${phone}, Email: ${email}`)
}
// Demo
// info.bind(person)('12345', 'v@mail.ru')