Skip to content

Commit 30e5726

Browse files
committed
Added few more algorithms
1 parent 98dc4fb commit 30e5726

12 files changed

+193
-0
lines changed

BubbleSort.js

+16
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
function sort(arr) {
2+
for(let i = 0; i < arr.length ; i++) {
3+
for(let j = 0; j < arr.length - i; j++) {
4+
if(arr[j] > arr[j+1]) {
5+
let temp = arr[j];
6+
arr[j] = arr[j+1];
7+
arr[j+1] = temp;
8+
}
9+
}
10+
}
11+
return arr;
12+
}
13+
14+
// Bubble Sort Time complexity- Ω(n) θ(n^2) O(n^2)
15+
// space - O(1)
16+
console.log(sort([14, 33, 27, 35, 10]));

CustomApply.js

+19
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
let person = {
2+
firstname: 'tom',
3+
lastname: 'harris',
4+
getFullName: function() {
5+
return `${this.firstname} ${this.lastname}`;
6+
}
7+
}
8+
function log(job , title) {
9+
console.log(`FullName: ${title} ${this.getFullName()}, ${job}`);
10+
}
11+
12+
log.apply(person, ['Engineer', 'Mr.']);
13+
14+
Function.prototype.myapply = function(obj) {
15+
let args = Array.from(arguments)[1];
16+
obj.func = this;
17+
return obj.func(...args);
18+
}
19+
log.myapply(person, ['Engineer', 'Mr.']);

CustomBind.js

+23
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
let person = {
2+
firstname: 'tom',
3+
lastname: 'harris',
4+
getFullName: function() {
5+
return `${this.firstname} ${this.lastname}`;
6+
}
7+
}
8+
function log() {
9+
console.log(`FullName: ${this.getFullName()}`);
10+
}
11+
// log(); // throws error;
12+
let newLog = log.bind(person);
13+
newLog();
14+
// console.log(person.getFullName());
15+
16+
Function.prototype.mybind = function(obj) {
17+
let func = this;
18+
return function() {
19+
func.call(obj);
20+
}
21+
}
22+
let myNewlog = log.mybind(person);
23+
myNewlog();

CustomCall.js

+19
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
let person = {
2+
firstname: 'tom',
3+
lastname: 'harris',
4+
getFullName: function() {
5+
return `${this.firstname} ${this.lastname}`;
6+
}
7+
}
8+
function log(job , title) {
9+
console.log(`FullName: ${title} ${this.getFullName()}, ${job}`);
10+
}
11+
12+
log.call(person, 'Engineer', 'Mr.');
13+
14+
Function.prototype.mycall = function(obj) {
15+
let args = Array.from(arguments).slice(1);
16+
obj.func = this;
17+
return obj.func(...args);
18+
}
19+
log.mycall(person, 'Engineer', 'Mr.');

CustomFilter.js

+14
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
Array.prototype.myfilter = function (func) {
2+
let arr = this;
3+
let newArr = [];
4+
for (let i = 0; i < arr.length; i++) {
5+
if (func(arr[i])) {
6+
newArr.push(arr[i]);
7+
}
8+
}
9+
return newArr;
10+
};
11+
12+
// let newArr = [1, 2, 3, 4, 5, 6, 7, 8].filter((x) => x % 2 === 0);
13+
let newArr = [1, 2, 3, 4, 5, 6, 7, 8].myfilter((x) => x % 2 === 0);
14+
console.log(newArr);

CustomMap.js

+12
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
Array.prototype.mymap = function (func) {
2+
let arr = this;
3+
let newArr = [];
4+
for(let i = 0; i< arr.length; i++) {
5+
newArr.push(func(arr[i]));
6+
}
7+
return newArr;
8+
};
9+
// let newArr = [1, 2, 3].map((x) => x * 2);
10+
// console.log(newArr);
11+
let newArr = [1, 2, 3].mymap((x) => x * 2);
12+
console.log(newArr);

CustomReduce.js

+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
Array.prototype.myreduce = function (func) {
2+
let arr = this;
3+
let accum = 0;
4+
for (let i = 0; i < arr.length; i++) {
5+
accum = func(accum, arr[i]);
6+
}
7+
return accum;
8+
};
9+
10+
// let result = [1, 2, 3].reduce((a, b) => a + b);
11+
let result = [1, 2, 3].myreduce((a, b) => a + b);
12+
13+
console.log(result);

Debounce.js

+14
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
function debounce(func, delay) {
2+
let timeout = null;
3+
return function() {
4+
let context = this;
5+
clearTimeout(timeout);
6+
timeout = setTimeout(function() {
7+
func.call(context);
8+
}, delay);
9+
}
10+
}
11+
12+
document.body.addEventListener('click', debounce( function() {
13+
console.log("This should be executed");
14+
}, 2000));

InsertionSort.js

+16
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
function sort(arr) {
2+
for (let i = 1; i < arr.length; i++) {
3+
let index = i;
4+
while (arr[index] < arr[index-1] && index > 0) {
5+
let temp = arr[index];
6+
arr[index] = arr[index-1];
7+
arr[index-1] = temp;
8+
index -= 1;
9+
}
10+
}
11+
return arr;
12+
}
13+
// Insertion Sort Time complexity- Ω(n) θ(n^2) O(n^2)
14+
// space - O(1)
15+
console.log(sort([14, 33, 27, 10, 35, 19, 42, 44]));
16+
console.log(sort([3, 2, 1, 4]));

SelectionSort.js

+21
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
function sort(arr) {
2+
for (let i = 0; i < arr.length; i++) {
3+
let elem = arr[i],
4+
index = i;
5+
for (let j = i + 1; j < arr.length; j++) {
6+
if (arr[j] < elem) {
7+
elem = arr[j];
8+
index = j;
9+
}
10+
}
11+
if (elem !== arr[i]) {
12+
arr[index] = arr[i];
13+
arr[i] = elem;
14+
}
15+
}
16+
return arr;
17+
}
18+
// Selection Sort Time complexity- Ω(n) θ(n^2) O(n^2)
19+
// space - O(1)
20+
console.log(sort([14, 33, 27, 10, 35, 19, 42, 44]));
21+
console.log(sort([3, 2, 1, 4]));

Throttle.js

+17
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
function throttle(func, limit) {
2+
let shouldCall = true;
3+
return function() {
4+
let context = this;
5+
let args = arguments;
6+
if(shouldCall) {
7+
func.call(context, args);
8+
shouldCall = false;
9+
setTimeout(() => shouldCall = true, limit);
10+
}
11+
}
12+
}
13+
14+
15+
document.body.addEventListener('click', throttle( function() {
16+
console.log("This should be executed");
17+
}, 2000));

this.js

+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
function log() {
2+
let color = "orange";
3+
return function() {
4+
console.log(this.color);
5+
}
6+
}
7+
log()();
8+
let logCopy = log().bind({color: "blue"});
9+
logCopy();

0 commit comments

Comments
 (0)