Skip to content

Commit 293628a

Browse files
notes update
1 parent 288ed07 commit 293628a

File tree

4 files changed

+220
-0
lines changed

4 files changed

+220
-0
lines changed

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
/jsinterview
2+
.DS_Store
3+
practice.js

Arrays/array.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
const arr = [1, 2, 3];
2+
3+
const arr1 = arr.join('-');
4+
5+
console.log(arr);
6+
console.log(arr1);
7+

Arrays/array.md

Lines changed: 179 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,179 @@
1+
JavaScript array methods can be categorized into two groups:
2+
- Mutating methods: These are the methods that directly modify the original array.
3+
- Non-mutating methods: These methods return a new array without altering the
4+
original one.
5+
6+
There are 9 methods in total that mutate the arrays,
7+
```javascript
8+
let arr1 = [1, 2, 3];
9+
// Syntax: array.push(element1, element2, ..., elementN)
10+
let newLength1 = arr1.push(4, 5); // arr1 is now [1, 2, 3, 4, 5], newLength1 is 5
11+
```
12+
the end of the array and returns the new length.
13+
2. `pop`: Removes the last element from the
14+
array and returns that element.
15+
```javascript
16+
let arr2 = [1, 2, 3];
17+
let lastElement = arr2.pop(); // arr2 is [1, 2], lastElement is 3
18+
```
19+
20+
3. `unshift`: Adds one or more elements to the beginning of
21+
the array and returns the new length.
22+
```javascript
23+
let arr3 = [2, 3];
24+
let newLength3 = arr3.unshift(1); // arr3 is [1, 2, 3], newLength3 is 3
25+
```
26+
4. `shift`: Removes the first element from the array
27+
and returns that element.
28+
```javascript
29+
let arr4 = [1, 2, 3];
30+
let firstElement = arr4.shift(); // arr4 is [2, 3], firstElement is 1
31+
```
32+
5. `splice`: Adds or removes elements from the array at a specific
33+
index position.
34+
```javascript
35+
let arr5 = [1, 2, 3, 4, 5];
36+
// Remove 2 elements starting from index 1
37+
let removed = arr5.splice(1, 2); // arr5 is [1, 4, 5], removed is [2, 3]
38+
// Add elements at index 1
39+
arr5.splice(1, 0, 2, 3); // arr5 is [1, 2, 3, 4, 5]
40+
```
41+
6. `sort`: Sorts the elements of the array in-place based on a given sorting
42+
criteria.
43+
```javascript
44+
let arr6 = [3, 1, 4, 2];
45+
arr6.sort(); // arr6 is [1, 2, 3, 4] (default string sort)
46+
arr6.sort((a, b) => b - a); // arr6 is [4, 3, 2, 1] (numeric sort)
47+
```
48+
7. `reverse`: Reverses the order of elements in the given array.
49+
```javascript
50+
let arr7 = [1, 2, 3];
51+
arr7.reverse(); // arr7 is [3, 2, 1]
52+
```
53+
8. `fill`: Fills all
54+
elements of the array with a specific value.
55+
```javascript
56+
let arr8 = [1, 2, 3];
57+
arr8.fill(0); // arr8 is [0, 0, 0]
58+
// Fill with 5 from index 1 to 3 (exclusive)
59+
let arr8b = [1, 2, 3, 4];
60+
arr8b.fill(5, 1, 3); // arr8b is [1, 5, 5, 4]
61+
```
62+
9. `copyWithin`: Copies a sequence of elements
63+
within the array to a specified target index in the same array
64+
```javascript
65+
let arr9 = [1, 2, 3, 4, 5];
66+
// Copy elements at index 3 to index 0
67+
arr9.copyWithin(0, 3, 4); // arr9 is [4, 2, 3, 4, 5]
68+
```
69+
70+
71+
Non-mutating methods: These methods return a new array without altering the
72+
original one.
73+
There are many non-mutating methods, including:
74+
1. `concat`: Merges two or more arrays and returns a new array.
75+
```javascript
76+
let arrA = [1, 2];
77+
let arrB = [3, 4];
78+
let merged = arrA.concat(arrB); // merged is [1, 2, 3, 4]
79+
```
80+
2. `slice`: Returns a shallow copy of a portion of an array into a new array object.
81+
```javascript
82+
let arrC = [1, 2, 3, 4, 5];
83+
let sliced = arrC.slice(1, 3); // sliced is [2, 3]
84+
```
85+
3. `map`: Creates a new array populated with the results of calling a provided function on every element in the calling array.
86+
```javascript
87+
let arrD = [1, 2, 3];
88+
let doubled = arrD.map(x => x * 2); // doubled is [2, 4, 6]
89+
```
90+
4. `filter`: Creates a new array with all elements that pass the test implemented by the provided function.
91+
```javascript
92+
let arrE = [1, 2, 3, 4];
93+
let evens = arrE.filter(x => x % 2 === 0); // evens is [2, 4]
94+
```
95+
5. `reduce`: Executes a user-supplied "reducer" callback function on each element of the array, in order, passing in the return value from the calculation on the preceding element. The final result of running the reducer across all elements of the array is a single value.
96+
```javascript
97+
let arrF = [1, 2, 3, 4];
98+
let sum = arrF.reduce((acc, curr) => acc + curr, 0); // sum is 10
99+
```
100+
6. `forEach`: Executes a provided function once for each array element. It does not return a new array; its return value is `undefined`.
101+
```javascript
102+
let arrG = [1, 2, 3];
103+
arrG.forEach(x => console.log(x)); // Logs 1, 2, 3
104+
```
105+
7. `join`: Creates and returns a new string by concatenating all of the elements in an array.
106+
```javascript
107+
let arrH = ['a', 'b', 'c'];
108+
let str = arrH.join('-'); // str is "a-b-c"
109+
```
110+
8. `indexOf`/`lastIndexOf`: Returns the first/last index at which a given element can be found in the array, or -1 if it is not present.
111+
```javascript
112+
let arrI = [1, 2, 3, 2, 1];
113+
let firstIndex = arrI.indexOf(2); // 1
114+
let lastIndex = arrI.lastIndexOf(2); // 3
115+
```
116+
9. `includes`: Determines whether an array includes a certain value among its entries, returning `true` or `false`.
117+
```javascript
118+
let arrJ = [1, 2, 3];
119+
let hasTwo = arrJ.includes(2); // true
120+
let hasFour = arrJ.includes(4); // false
121+
```
122+
10. `find`: Returns the value of the first element in the provided array that satisfies the provided testing function.
123+
```javascript
124+
let arrK = [5, 12, 8, 130, 44];
125+
let found = arrK.find(element => element > 10); // found is 12
126+
```
127+
11. `findIndex`: Returns the index of the first element in the array that satisfies the provided testing function. Otherwise, it returns -1.
128+
```javascript
129+
let arrL = [5, 12, 8, 130, 44];
130+
let foundIndex = arrL.findIndex(element => element > 13); // foundIndex is 3
131+
```
132+
12. `some`: Tests whether at least one element in the array passes the test implemented by the provided function.
133+
```javascript
134+
let arrM = [1, 2, 3, 4, 5];
135+
let even = arrM.some(element => element % 2 === 0); // true
136+
```
137+
13. `every`: Tests whether all elements in the array pass the test implemented by the provided function.
138+
```javascript
139+
let arrN = [1, 30, 39, 29, 10, 13];
140+
let allBelow40 = arrN.every(element => element < 40); // true
141+
```
142+
14. `flat`: Creates a new array with all sub-array elements concatenated into it recursively up to the specified depth.
143+
```javascript
144+
let arrO = [0, 1, 2, [3, 4]];
145+
let flattened = arrO.flat(); // flattened is [0, 1, 2, 3, 4]
146+
```
147+
15. `flatMap`: Returns a new array formed by applying a given callback function to each element of the array, and then flattening the result by one level.
148+
```javascript
149+
let arrP = [1, 2, 3, 4];
150+
let flatMapped = arrP.flatMap(x => [x, x * 2]); // flatMapped is [1, 2, 2, 4, 3, 6, 4, 8]
151+
```
152+
16. `at`: Takes an integer value and returns the item at that index, allowing for positive and negative integers.
153+
```javascript
154+
let arrQ = [5, 12, 8, 130, 44];
155+
let index2 = arrQ.at(2); // 8
156+
let lastItem = arrQ.at(-1); // 44
157+
```
158+
17. `reduceRight`: Applies a function against an accumulator and each value of the array (from right-to-left) to reduce it to a single value.
159+
```javascript
160+
let arrR = ['1', '2', '3', '4', '5'];
161+
let rightReduced = arrR.reduceRight((acc, curr) => acc + curr); // "54321"
162+
```
163+
164+
### Static Methods
165+
166+
1. `Array.from`: Creates a new, shallow-copied Array instance from an iterable or array-like object.
167+
```javascript
168+
let fromString = Array.from('foo'); // ["f", "o", "o"]
169+
```
170+
2. `Array.of`: Creates a new Array instance from a variable number of arguments, regardless of number or type of the arguments.
171+
```javascript
172+
let ofArray = Array.of(7); // [7]
173+
let ofArray2 = Array.of(1, 2, 3); // [1, 2, 3]
174+
```
175+
3. `Array.isArray`: Determines whether the passed value is an Array.
176+
```javascript
177+
let isArr = Array.isArray([1, 2, 3]); // true
178+
let isNotArr = Array.isArray({foo: 123}); // false
179+
```

JS-Interview-Questions/eventloop.md

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,17 @@
1818

1919
The **Event Loop** is the mechanism that allows JavaScript to perform non-blocking operations despite being single-threaded. It continuously monitors the call stack and queues, moving tasks from queues to the call stack when it's empty.
2020

21+
The event loop is a process that continuously monitors both the call stack and the
22+
event queue and checks whether or not the call stack is empty. If the call stack is
23+
empty and there are pending events in the event queue, the event loop dequeues the
24+
event from the event queue and pushes it to the call stack. The call stack executes
25+
the event, and any additional events generated during the execution are added to
26+
the end of the event queue.
27+
Note: The event loop allows Node.js to perform non-blocking I/O operations, even
28+
though JavaScript is single-threaded, by offloading operations to the system kernel
29+
whenever possible. Since most modern kernels are multi-threaded, they can handle
30+
multiple operations executing in the background
31+
2132
### Key Points:
2233
- JavaScript is **single-threaded** but can handle **asynchronous operations**
2334
- Event Loop enables **non-blocking behavior**
@@ -29,6 +40,26 @@ The **Event Loop** is the mechanism that allows JavaScript to perform non-blocki
2940

3041
The **Call Stack** is a LIFO (Last In, First Out) data structure that keeps track of function calls.
3142

43+
Call Stack is a data structure for javascript interpreters to keep track of function
44+
calls(creates execution context) in the program. It has two major actions,
45+
1. Whenever you call a function for its execution, you are pushing it to the stack.
46+
2. Whenever the execution is completed, the function is popped out of the stack.
47+
Let’s take an example and it’s state representation in a diagram format
48+
function hungry() {
49+
eatFruits();
50+
}
51+
function eatFruits() {
52+
return "I'm eating fruits";
53+
}
54+
// Invoke the `hungry` function
55+
hungry();
56+
The above code processed in a call stack as below,
57+
3. Add the hungry() function to the call stack list and execute the code.
58+
4. Add the eatFruits() function to the call stack list and execute the code.
59+
5. Delete the eatFruits() function from our call stack list.
60+
6. Delete the hungry() function from the call stack list since there are no items
61+
anymore.
62+
3263
### How it works:
3364
1. When a function is called, it's pushed onto the stack
3465
2. When a function returns, it's popped off the stack

0 commit comments

Comments
 (0)