JavaScript Array Methods

// Array Functions Legend:
// ⚠️ Mutable Functions   
// ✅ Immutable Functions

const arr = [1, 2, 3, 4];

// Iteration
arr.forEach(item => item); // ⚠️ Log: 1, 2, 3, 4
arr.map(item => item * 2); // ✅ Log: [2, 4, 6, 8]
arr.filter(item => item > 2); // ✅ Log: [3, 4]
arr.reduce((acc, curr) => acc + curr, 0); // ✅ Log: 10

// Searching
arr.indexOf(3); // ✅ Log: 2
arr.findIndex(item => item === 3); // ✅ Log: 2
arr.includes(4); // ✅ Log: true
arr.some(item => item > 2); // ✅ Log: true
arr.every(item => item > 0); // ✅ Log: true

// Checks

Array.isArray(arr); // ✅ Log: true

// Modification
arr.push(5); // ⚠️ Log: [1, 2, 3, 4, 5]
arr.pop(); // ⚠️ Log: [1, 2, 3, 4]
arr.shift(); // ⚠️ Log: [2, 3, 4]
arr.unshift(0); // ⚠️ Log: [0, 2, 3, 4]
arr.splice(1, 2, 9, 10); // ⚠️ Log: [0, 9, 10, 4]

// Concatenation
const newArr = arr.concat([6, 7]); // ✅ Log: [0, 9, 10, 4, 6, 7]

// Transformation
arr.join(', '); // ✅ Log: "0, 9, 10, 4"
arr.reverse(); // ⚠️ Log: [4, 10, 9, 0]
arr.sort((a, b) => a - b); // ⚠️ Log: [0, 4, 9, 10]
arr.slice(1, 3); // ✅ Log: [4, 9]

// Functional Programming
arr.map(item => item * 2).filter(item => item > 4); // ✅ Log: [8, 18, 20]
arr.reduce((acc, curr) => acc.concat(curr), []); // ✅ Log: [0, 4, 9, 10]

Mutable refers to data structures that can be modified or altered after creation, allowing changes to the underlying values.

Immutable implies that once a data structure is created, its values cannot be changed, providing stability and avoiding direct modifications.