JavaScript లో Arrays & Array Methods

🟨 JavaScript (ES2026+) 🟢 Lesson 14 (Ch 14 & 15 Merged) 📂 Part 03: Functions & Data (Page 2 of 4) ⏱️ 18 min read
📌 Covered in this lesson: Array creation · 0-based Indexing · push/pop/shift/unshift · Loops · 2D Arrays · map, filter, reduce · find & some · slice vs splice · sort & chaining

మీ క్లాస్ లో 50 మంది విద్యార్థుల మార్కులను store చేయాలనుకోండి. 50 వేర్వేరు variables తయారు చేస్తారా? mark1, mark2, mark3 ... mark50? అది రాయడం చాలా కష్టం, పైగా వాటన్నిటి సగటు (average) తీయడం ఇంకా కష్టం!

దీనికి అద్భుతమైన పరిష్కారం Array. Array అంటే ఒకే చోట చాలా విలువలను వరుసగా నిల్వ చేసే లిస్ట్. ఒక పుస్తకాల అరలో (bookshelf) పుస్తకాలను వరుసగా పేర్చినట్లు: ప్రతి దానికి ఒక స్థానం (నంబర్/index) ఉంటుంది. ఒక్క పేరుతో (marks) మొత్తం 50 మార్కులనూ దాచుకోవచ్చు.

ఈ సమగ్ర పేజీలో మనం రెండు ముఖ్యమైన భాగాలు నేర్చుకుంటాం: Part A లో Arrays బేసిక్స్ (నిర్మించడం, యాక్సెస్ చేయడం, మార్చడం, loops, 2D arrays). Part B లో ఆధునిక ప్రాజెక్ట్‌లు మరియు జాబ్ ఇంటర్వ్యూలలో అత్యంత ప్రాధాన్యత కలిగిన శక్తివంతమైన Array Methods (map, filter, reduce, sort మొదలైనవి).

Part A: Arrays Basics

డేటాను సమూహంగా నిల్వ చేయడం, ఇండెక్సింగ్, మ్యుటేషన్ మరియు ప్రాథమిక లూపింగ్ పద్ధతులు

1Array ని తయారు చేయడం (Creation)

Array ని చతురస్ర బ్రాకెట్లు [ ] లో, విలువలను కామాలతో వేరు చేసి (comma-separated) రాస్తాం.

JavaScript — Simple Array Creation ▶ Run Code
const fruits = ["Apple", "Banana", "Mango"];
console.log(fruits);
console.log(fruits.length);
Output:
[ 'Apple', 'Banana', 'Mango' ]
3
  • fruits అనేది array పేరు. లోపల 3 విలువలు (elements) ఉన్నాయి.
  • .length అనే property array లో మొత్తం ఎన్ని elements ఉన్నాయో ఖచ్చితంగా చెబుతుంది.

ఏ రకం విలువలైనా పెట్టొచ్చు (Mixed Data Types)

JavaScript arrays చాలా సరళమైనవి (flexible). Array లో numbers, strings, booleans, null, ఇంకా వేరే arrays కూడా పెట్టొచ్చు. ఒకే array లో వేర్వేరు రకాల డేటాను కలిపి కూడా ఉంచవచ్చు (కానీ నిజ జీవితంలో క్లీన్ కోడ్ కోసం ఒకే రకం డేటాను పెడతాం).

JavaScript — Mixed & Empty Arrays ▶ Run Code
const mixed = ["రవి", 25, true, null];
const empty = [];
console.log(mixed);
console.log(empty, empty.length);
Output:
[ 'రవి', 25, true, null ]
[] 0

[] అనేది ఖాళీ array (empty array). మొదట ఖాళీ array ని తయారుచేసి, ప్రోగ్రామ్ రన్ అవుతున్నప్పుడు డేటాను దాచుకోవడానికి ఇది బాగా ఉపయోగపడుతుంది.

Array అంటే ఏ డేటా రకం? (Type of Array)

JavaScript — Array Type Check ▶ Run Code
const fruits = ["Apple", "Banana", "Mango"];
console.log(typeof fruits, Array.isArray(fruits));
Output:
object true
💡 ముఖ్యమైన ఇంటర్వ్యూ పాయింట్:

typeof ఆపరేటర్ array ని కూడా "object" అనే చెబుతుంది (Chapter 4 లో typeof null === "object" లాగా ఇది JavaScript లో ఒక చారిత్రక విచిత్రం). కాబట్టి ఒక variable నిజంగా array అవునా కాదా ఖచ్చితంగా నిర్ధారించుకోవడానికి ఎప్పుడూ Array.isArray(variable) వాడాలి!

2విలువలను తీసుకోవడం (Access) మరియు Index

Array లోని ప్రతి విలువకు ఒక index (స్థాన సంఖ్య) ఉంటుంది. కంప్యూటర్ సైన్స్ లో అతి ముఖ్యమైన నియమం: ఇండెక్స్ ఎప్పుడూ 0 నుంచి మొదలవుతుంది, 1 నుంచి కాదు!

ఇండెక్స్ (Index) 0 1 2
విలువ (Element) "Apple" "Banana" "Mango"

రైలు పెట్టెలకు (train compartments) 0 నుంచి నంబర్లు వేసినట్లు ఊహించుకోండి. మొదటి విలువ index 0 లో, రెండోది index 1 లో, మూడోది index 2 లో ఉంటుంది.

JavaScript — Accessing Elements ▶ Run Code
const fruits = ["Apple", "Banana", "Mango"];
console.log(fruits[0], fruits[2], fruits[3]);
Output:
Apple Mango undefined
  • fruits[0] → మొదటి విలువ "Apple".
  • fruits[2] → మూడో విలువ "Mango".
  • fruits[3] → అలాంటి స్థానమే లేదు (ఎందుకంటే ఉన్నవే 3 elements, వాటి ఇండెక్సులు 0, 1, 2). కాబట్టి JavaScript లో ఎర్రర్ రాకుండా undefined వస్తుంది.

చివరి విలువను తీసుకోవడం (Last Element)

Array లో చివరి index ఎప్పుడూ length - 1 అవుతుంది (3 elements ఉంటే చివరి index 2).

JavaScript — Accessing Last Element ▶ Run Code
const fruits = ["Apple", "Banana", "Mango"];
console.log(fruits[fruits.length - 1]);
console.log(fruits.at(-1));
Output:
Mango
Mango

.at(-1) అనేది ఆధునిక (ES2022+) చిన్న పద్ధతి: ఋణ సంఖ్య (negative index) ఇస్తే చివరి నుంచి లెక్కిస్తుంది (-1 చివరిది, -2 చివరి నుంచి రెండోది). పాత బ్రౌజర్లను దృష్టిలో పెట్టుకున్నప్పుడు arr[arr.length - 1] పద్ధతి కూడా తెలుసుకోవడం ఉత్తమం.

3విలువను మార్చడం (Update)

ఇండెక్స్ ద్వారా ఒక స్థానంలోని విలువను నేరుగా కొత్త విలువతో రీప్లేస్ చేయవచ్చు.

JavaScript — Modifying Element ▶ Run Code
const fruits = ["Apple", "Banana", "Mango"];
fruits[1] = "Orange";
console.log(fruits);
Output:
[ 'Apple', 'Orange', 'Mango' ]

const తో పెట్టిన Array ని మార్చవచ్చా?

అవును, ఖచ్చితంగా మార్చవచ్చు! చాలా మంది బిగినర్స్ const ఉంది కదా, లోపలి విలువలు ఎలా మారతాయి అని అయోమయానికి గురవుతారు. const అంటే "ఈ వేరియబుల్ కి వేరే సరికొత్త array అడ్రస్ ని అసైన్ చేయలేం" అని మాత్రమే అర్థం. కానీ array లోపలి బాక్సుల్లోని విలువలను సులభంగా మార్చుకోవచ్చు.

JavaScript — Reassignment vs Mutation ▶ Run Code
const f2 = ["a"];
f2 = []; // ❌ Error! Reassignment not allowed
Output:
TypeError: Assignment to constant variable.

కొత్త array ని f2 = [] అని ఇవ్వలేం. కానీ f2[0] = "b" లేదా f2.push("c") చేయడం 100% చెల్లుబాటు అవుతుంది.

4Elements ని చేర్చడం మరియు తీసివేయడం (push, pop, unshift, shift)

Array చివరన లేదా మొదట్లో elements ని చేర్చడానికి, తీసేయడానికి 4 ప్రధాన మెథడ్స్ ఉన్నాయి. వీటిని సినిమా టికెట్ క్యూ లైన్ లో నిల్చున్న వ్యక్తుల్లా ఊహించుకోండి:

Method పని (Operation) ఎక్కడ జరుగుతుంది?
push(x) చివర్లో కొత్త element ని చేర్చుతుంది క్యూ వరుస చివర (End)
pop() చివరి element ని తొలగిస్తుంది క్యూ వరుస చివర (End)
unshift(x) మొదట్లో కొత్త element ని చేర్చుతుంది క్యూ వరుస మొదట (Start)
shift() మొదటి element ని తొలగిస్తుంది క్యూ వరుస మొదట (Start)
JavaScript — push, pop, unshift, shift Live Demo ▶ Run Code
const nums = [10, 20, 30];

console.log(nums.push(40));   // 40 ని చివర చేర్చింది
console.log(nums);

console.log(nums.pop());      // చివరిది తీసేసింది
console.log(nums);

console.log(nums.unshift(5)); // 5 ని మొదట్లో చేర్చింది
console.log(nums);

console.log(nums.shift());    // మొదటిది తీసేసింది
console.log(nums);
Output:
4
[ 10, 20, 30, 40 ]
40
[ 10, 20, 30 ]
4
[ 5, 10, 20, 30 ]
5
[ 10, 20, 30 ]

ఈ Methods ఏమి రిటర్న్ చేస్తాయి? (Return Values)

Method తిరిగి ఇచ్చే ఫలితం (Return Value) పై ఉదాహరణలో ఫలితం
push ఎలిమెంట్ చేర్చిన తర్వాత వచ్చే కొత్త length 4
pop అరే నుండి తొలగించిన element 40
unshift ఎలిమెంట్ చేర్చిన తర్వాత వచ్చే కొత్త length 4
shift అరే నుండి తొలగించిన element 5
⚠️ గమనిక (Mutation Alert):

ఈ నాలుగు methods కూడా నేరుగా అసలు array లోని డేటాను మార్చివేస్తాయి (దీన్ని ప్రోగ్రామింగ్ లో "mutate చేయడం" అంటారు). ఖాళీ array మీద pop() చేస్తే ఎలాంటి crash లేదా error రాదు, కేవలం undefined వస్తుంది:

console.log([].pop()); // Output: undefined
5Array ని Loop చేయడం (Traversing an Array)

Array లోని ప్రతి ఎలిమెంట్‌ని ఒక్కొక్కటిగా విజిట్ చేసి చూడాలంటే loops వాడతాం (Chapter 10 లో మనం నేర్చుకున్న లూప్స్ ఇక్కడ ఎంతగానో తోడ్పడతాయి).

1. సాధారణ for loop (ఇండెక్స్ అవసరమైనప్పుడు):

JavaScript — Standard for Loop ▶ Run Code
const marks = [80, 65, 90, 55];
for (let i = 0; i < marks.length; i++) {
  console.log(`marks[${i}] = ${marks[i]}`);
}
Output:
marks[0] = 80
marks[1] = 65
marks[2] = 90
marks[3] = 55
  • let i = 0: array index ఎప్పుడూ 0 తో మొదలవుతుంది.
  • i < marks.length: ఇక్కడ < మాత్రమే వాడాలి, <= వాడకూడదు! ఒకవేళ <= వాడితే, marks[4] ని కూడా చదువుతుంది, అక్కడ ఏమీ ఉండదు కాబట్టి undefined వస్తుంది (దీన్ని off-by-one బగ్ అంటారు).

2. for...of loop (విలువలు మాత్రమే కావాలంటే — అత్యంత సులభం):

JavaScript — for...of Loop ▶ Run Code
const fruits = ["Apple", "Banana", "Mango"];
for (const fruit of fruits) {
  console.log(fruit);
}
Output:
Apple
Banana
Mango

మీకు index నంబర్ తో పనిలేకుండా కేవలం అరే లోని విలువలు (values) మాత్రమే కావాలంటే for...of రాయడం మరియు చదవడం రెండూ ఎంతో సులభం.

6ప్రాక్టికల్ ఉదాహరణలు (Practical Examples)

ఉదాహరణ 1: మార్కుల మొత్తం మరియు సగటు (Sum & Average)

JavaScript — Sum and Average ▶ Run Code
const marks = [80, 65, 90, 55];
let sum = 0;
for (let i = 0; i < marks.length; i++) {
  sum += marks[i];
}
console.log("మొత్తం:", sum);
console.log("సగటు:", sum / marks.length);
Output:
మొత్తం: 290
సగటు: 72.5

sum ని లూప్ బయట 0 తో ప్రారంభించాం. లూప్ లో ప్రతి మార్కుని దానికి జోడిస్తూ వెళ్ళాం.

ఉదాహరణ 2: అత్యధిక విలువను కనుగొనడం (Find Maximum)

JavaScript — Find Largest Element ▶ Run Code
const marks = [80, 65, 90, 55];
let max = marks[0];
for (const m of marks) {
  if (m > max) {
    max = m;
  }
}
console.log("అతి పెద్ద మార్కు:", max);
Output:
అతి పెద్ద మార్కు: 90

ఉదాహరణ 3: సరి సంఖ్యలను లెక్కించడం (Count Evens)

JavaScript — Count Even Numbers ▶ Run Code
let count = 0;
for (const n of [3, 8, 12, 7, 4]) {
  if (n % 2 === 0) {
    count++;
  }
}
console.log("సరి సంఖ్యలు:", count);
Output:
సరి సంఖ్యలు: 3
7Nested Arrays (Array లోపల Array — 2D Arrays)

ఒక array లోపల మరిన్ని arrays ని పెట్టవచ్చు. దీన్ని 2D Array (పట్టిక, matrix లేదా గ్రిడ్) అంటారు. ఒక క్లాస్ రూమ్ లో వరుసలు (rows) మరియు కాలమ్ లు (columns) లాగా ఊహించుకోవచ్చు.

JavaScript — 2D Matrix ▶ Run Code
const matrix = [
  [1, 2, 3],
  [4, 5, 6],
  [7, 8, 9]
];

console.log(matrix[1][2]);
console.log(matrix[0]);
console.log(matrix);
console.log(matrix[0][0], matrix[1][1], matrix[2][2]);
Output:
6
[ 1, 2, 3 ]
[ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] ]
1 5 9
  • matrix[1] అంటే రెండవ అడ్డు వరుస (row): [4, 5, 6].
  • matrix[1][2] అంటే రెండవ వరుసలో మూడవ విలువ: 6. మొదటి [ ] వరుసను (row), రెండవ [ ] నిలువు కాలమ్‌ను (column) సూచిస్తుంది.
  • matrix[0][0], matrix[1][1], matrix[2][2] అనేవి ప్రధాన వికర్ణం (diagonal) విలువలు: 1 5 9.
8Part A లో బిగినర్స్ చేసే సాధారణ తప్పులు (Common Mistakes)
⚠️ జాగ్రత్తగా ఉండాల్సిన 5 ప్రధాన తప్పులు:
  1. Index 1 నుంచి మొదలవుతుందనుకోవడం: మొదటి element arr[0] అవుతుంది కానీ arr[1] కాదు. ఇది ప్రతి ప్రారంభ ప్రోగ్రామర్ చేసే అత్యంత సాధారణ తప్పు.
  2. చివరి index ని length అనుకోవడం: array లో 3 elements ఉంటే చివరి index 2 మాత్రమే. arr[arr.length] ఎల్లప్పుడూ undefined ఇస్తుంది.
  3. Arrays ని === తో పోల్చడం (Reference Comparison):
    console.log([1, 2] === [1, 2]); // Output: false
    రెండు arrays లో ఒకేలాంటి సమాన విలువలు ఉన్నప్పటికీ, కంప్యూటర్ ర్యామ్ (memory) లో అవి వేర్వేరు ప్రదేశాల్లో ఉంటాయి. === కేవలం మెమరీ అడ్రస్‌లను మాత్రమే పోలుస్తుంది, కాబట్టి false వస్తుంది.
  4. Array ని కాపీ చేశాననుకోవడం (కానీ ఒకే రిఫరెన్స్ ఉండటం):
    const a = [1, 2, 3];
    const b = a; // ❌ కొత్త కాపీ కాదు! అదే అరే కి మరో పేరు.
    b.push(4);
    console.log(a); // Output: [ 1, 2, 3, 4 ]
    నిజమైన కాపీ కావాలంటే a.slice() లేదా స్ప్రెడ్ ఆపరేటర్ [...a] వాడాలి:
    const a = [1, 2, 3];
    const copy = a.slice();
    copy.push(99);
    console.log(a);    // [ 1, 2, 3 ] (అసలుది సేఫ్!)
    console.log(copy); // [ 1, 2, 3, 99 ]
  5. const array కి కొత్త array ని ఇవ్వడం: const f2 = ["a"]; f2 = []; రాస్తే TypeError: Assignment to constant variable వస్తుంది.

Part B: Array Methods

ఆధునిక JavaScript లో map, filter, reduce, sort, find వంటి అత్యంత కీలకమైన ఫంక్షనల్ మెథడ్స్

ముందుగా తెలుసుకోవాల్సిన ముఖ్యమైన వర్గీకరణ:

JavaScript array methods ని రెండు రకాలుగా వర్గీకరించవచ్చు:

  • Mutating Methods (అసలు array ని మార్చేవి): push, pop, shift, unshift, splice, sort, reverse.
  • Non-mutating Methods (అసలు array ని మార్చకుండా సరికొత్త array ఇచ్చేవి): map, filter, slice, concat, join, find, includes, reduce.

ఈ పార్ట్‌లోని చాలా మెథడ్స్ ఒక callback function (Chapter 13 లో నేర్చుకున్న Arrow Function) ని ఇన్పుట్ గా తీసుకుంటాయి. అంటే "ప్రతి ఎలిమెంట్‌తో ఈ పని చెయ్యి" అని మనం JavaScript కి సూచన ఇస్తాం.

9forEach, map, filter, reduce (అత్యంత శక్తివంతమైన 4 స్తంభాలు)

1. forEach: ప్రతి element తో ఏదైనా ఒక పని చేయడం

forEach ప్రతి ఎలిమెంట్ కి ఇచ్చిన ఫంక్షన్‌ని ఒకసారి రన్ చేస్తుంది. ఇది ఎలాంటి కొత్త array ని return చేయదు; కేవలం ప్రింట్ చేయడం లేదా ఏదైనా పని చేయడానికి వాడతాం.

JavaScript — forEach ▶ Run Code
["Apple", "Banana", "Mango"].forEach((fruit, index) => {
  console.log(`${index}: ${fruit}`);
});
Output:
0: Apple
1: Banana
2: Mango

2. map: ప్రతి element ని మార్చి (transform) కొత్త array తయారు చేయడం

map ప్రతి విలువపై ఫంక్షన్ ని అప్లై చేసి, అసలు array కి సమానమైన పొడవు (length) ఉన్న సరికొత్త array ని ఇస్తుంది. అసలు array ఏమాత్రం మారదు.

JavaScript — map Method ▶ Run Code
// డబుల్ చేయడం
console.log([10, 20, 30].map(n => n * 2));

// షాప్ వస్తువుల ధరలకు 18% GST కలపడం
console.log([100, 250, 400].map(p => p + p * 18 / 100));
Output:
[ 20, 40, 60 ]
[ 118, 295, 472 ]

3. filter: షరతుకు సరిపోయే elements ని మాత్రమే వడకట్టడం (Filtering)

మనం ఇచ్చే ఫంక్షన్ ఏ ఎలిమెంట్స్ కి అయితే true ని రిటర్న్ చేస్తుందో, వాటిని మాత్రమే ఎంపిక చేసి కొత్త array లో ఉంచుతుంది.

JavaScript — filter Method ▶ Run Code
// పాస్ మార్కులు (35 లేదా అంతకంటే ఎక్కువ) మాత్రమే వడకట్టడం
console.log([80, 30, 55, 20, 90].filter(m => m >= 35));
Output:
[ 80, 55, 90 ]

4. reduce: అన్ని విలువలనూ కలిపి ఒకే విలువగా సంగ్రహించడం (Accumulator)

మొత్తం array ని చదివి, చివరకు ఒకే సంఖ్య లేదా స్ట్రింగ్ వంటి ఒకే ఒక్క విలువగా మార్చడానికి reduce వాడతాం.

JavaScript — reduce Method ▶ Run Code
console.log([10, 20, 30].reduce((total, n) => total + n, 0));
Output:
60

ఇది తెరవెనుక ఎలా పనిచేసిందో దశలవారీగా చూద్దాం: reduce కి ఫంక్షన్ తో పాటు ప్రారంభ విలువగా 0 ఇచ్చాం:

రౌండ్ (Round) total (మునుపటి నిల్వ) n (ప్రస్తుత element) total + n (కొత్త నిల్వ)
1 0 10 10
2 10 20 30
3 30 30 60

ఈ నాలుగింటి మధ్య స్పష్టమైన తేడా (Quick Comparison Table)

Method ఏం తిరిగి ఇస్తుంది? (Return Value) ఎప్పుడు వాడాలి?
forEach ఏమీ ఇవ్వదు (undefined) ప్రతి ఎలిమెంట్ తో ఒక పని చేయాలి (print, DB save వంటివి)
map అంతే పొడవు ఉన్న సరికొత్త array ప్రతి element ని మార్చి కొత్త array తయారు చేయాలి
filter చిన్నదైన (లేదా సమాన) కొత్త array కొన్ని షరతులకు సరిపోయేవి మాత్రమే ఎంపిక చేసుకోవాలి
reduce ఒకే ఒక్క విలువ (Single value) అన్నిటినీ కలపాలి (మొత్తం సంకలనం, గరిష్ట విలువ మొదలైనవి)
10find, findIndex, some, every

అరే లోని నిర్దిష్ట విలువలను శోధించడానికి మరియు ధృవీకరించడానికి ఈ మెథడ్స్ వాడతాం:

JavaScript — find & findIndex ▶ Run Code
const numbers = [5, 12, 8, 130, 44];

console.log(numbers.find(n => n > 10));
console.log(numbers.findIndex(n => n > 10));
console.log(numbers.find(n => n > 1000));
Output:
12
1
undefined
  • find: షరతుకు సరిపోయే మొట్టమొదటి element ని ఇస్తుంది (12). ఏదీ సరిపోకపోతే undefined వస్తుంది.
  • findIndex: ఆ మొట్టమొదటి element యొక్క index స్థానాన్ని ఇస్తుంది (1). సరిపోయేది ఏదీ లేకపోతే -1 ఇస్తుంది.
JavaScript — some & every ▶ Run Code
const numbers = [5, 12, 8, 130];

console.log(numbers.some(n => n > 100)); // కనీసం ఒక్కటైనా ఉందా?
console.log(numbers.every(n => n > 0));   // అన్నీ 0 కంటే పెద్దవేనా?
console.log(numbers.every(n => n > 10));  // అన్నీ 10 కంటే పెద్దవేనా?
Output:
true
true
false
  • some: కనీసం ఒక్క element అయినా షరతును పాటిస్తే true ఇస్తుంది (130 > 100 ఉంది కాబట్టి true).
  • every: అన్నీ elements ఖచ్చితంగా షరతును పాటిస్తేనే true ఇస్తుంది. (5 మరియు 8 లు 10 కంటే పెద్దవి కావు కాబట్టి ఆఖరి దానికి false వచ్చింది).
11includes మరియు indexOf

ఒక సాధారణ విలువ array లో ఉందా లేదా అని త్వరగా తెలుసుకోవడానికి:

JavaScript — includes & indexOf ▶ Run Code
const fruits = ["Apple", "Banana", "Mango"];

console.log(fruits.includes("Mango"), fruits.includes("Grapes"));
console.log(fruits.indexOf("Banana"), fruits.indexOf("Grapes"));
Output:
true false
1 -1
  • includes(x): ఉందా లేదా అని సింపుల్ గా true / false చెబుతుంది.
  • indexOf(x): అది ఏ index స్థానంలో ఉందో నంబర్ ఇస్తుంది. ఒకవేళ లిస్ట్ లో లేకపోతే -1 ఇస్తుంది.
12slice మరియు splice (అత్యంత ముఖ్యమైన తేడా)

పేర్లు దాదాపు ఒకేలా ఉన్నా, ఈ రెండూ పూర్తిగా భిన్నమైన పనులు చేస్తాయి. ఇంటర్వ్యూలలో ఇది రెగ్యులర్ ప్రశ్న!

slice(start, end): ఒక భాగాన్ని కాపీ చేయడం (అసలు array మారదు)

కేక్ ముక్కను చూసి ఫోటో తీసుకున్నట్లు. అసలు కేక్ అలాగే ఉంటుంది.

JavaScript — slice Method ▶ Run Code
const arr = [1, 2, 3, 4, 5];
console.log(arr.slice(1, 3));
console.log(arr);
Output:
[ 2, 3 ]
[ 1, 2, 3, 4, 5 ]

slice(1, 3) index 1 నుండి మొదలుపెట్టి, index 3 కంటే ముందు వరకు (3 ని కలపకుండా) కాపీ చేస్తుంది: అంటే index 1 మరియు 2 విలువలు [2, 3]. అసలు array arr ఏమాత్రం మారలేదు.

splice(start, deleteCount, ...items): array ని కత్తిరించడం / అతికించడం (అసలు array మారుతుంది)

కేక్ లోని భాగాన్ని కత్తిరించి తీసివేయడం లేదా కొత్త ముక్కను అతికించడం వంటిది. అసలు array మారిపోతుంది.

JavaScript — splice Method ▶ Run Code
const letters = ["a", "b", "c", "d"];

// index 1 వద్ద 2 elements ని తీసేయడం
console.log(letters.splice(1, 2));
console.log(letters);

// index 1 వద్ద ఏదీ తీసేయకుండా (0) "X" ని చేర్చడం
console.log(letters.splice(1, 0, "X"));
console.log(letters);
Output:
[ 'b', 'c' ]
[ 'a', 'd' ]
[]
[ 'a', 'X', 'd' ]
💡 గోల్డెన్ టిప్ గుర్తుంచుకోండి:

slice = Slice of cake to look at (కాపీ తీసుకో, అసలుది మారదు).
splice = Splice rope / Cut & Insert (కత్తిరించు, అసలు array మార్చబడుతుంది).

13sort, reverse, join, concat

sort: క్రమంలో అమర్చడం

JavaScript — Default sort() Quirk ▶ Run Code
console.log(["Mango", "Apple", "Banana"].sort());
console.log([10, 9, 1, 100].sort());
Output:
[ 'Apple', 'Banana', 'Mango' ]
[ 1, 10, 100, 9 ]

అక్షరాలకి (strings) చక్కగా ఆల్ఫాబెటికల్ ఆర్డర్ లో పని చేసింది. కానీ సంఖ్యలకు చూడండి: [ 1, 10, 100, 9 ] అని వచ్చింది! [1, 9, 10, 100] రావాలి కదా? 9 కంటే 100 ముందెందుకు వచ్చింది?

కారణం: sort() మెథడ్ డిఫాల్ట్‌గా సంఖ్యలను కూడా టెక్స్ట్ (String) గా మార్చి ఆల్ఫాబెటికల్ ఆర్డర్ లో చూస్తుంది. డిక్షనరీ లో "100" అనేది "1" తో మొదలవుతుంది కాబట్టి "9" కంటే ముందు వస్తుంది!

పరిష్కారం: సంఖ్యలను sort చేసేటప్పుడు ఎప్పుడూ ఒక compare function ఇవ్వాలి:

JavaScript — Numerical Sort ▶ Run Code
// పెరుగుతున్న క్రమం (Ascending)
console.log([10, 9, 1, 100].sort((a, b) => a - b));

// తగ్గుతున్న క్రమం (Descending)
console.log([10, 9, 1, 100].sort((a, b) => b - a));
Output:
[ 1, 9, 10, 100 ]
[ 100, 10, 9, 1 ]

reverse, join, concat:

JavaScript — reverse, join, concat ▶ Run Code
console.log([1, 2, 3].reverse());
console.log(["a", "b", "c"].join("-"));
console.log(["a", "b", "c"].join(""));
console.log([1, 2].concat([3, 4]));
Output:
[ 3, 2, 1 ]
a-b-c
abc
[ 1, 2, 3, 4 ]
  • reverse(): array ని వెనక్కి తిప్పుతుంది (ఇది అసలు array నే మారుస్తుంది).
  • join(separator): array లోని అన్ని అంశాలను కలిపి ఒక string గా మారుస్తుంది.
  • concat(other): రెండు arrays ని కలిపి ఒక కొత్త సంయుక్త array ని ఇస్తుంది.
14Methods ని కలపడం (Method Chaining)

map, filter వంటి non-mutating methods కొత్త array ని ఇస్తాయి కాబట్టి, వాటి వెంటనే డాట్ . పెట్టి ఇంకో మెథడ్‌ని అనుసంధానించవచ్చు. దీనిని Method Chaining అంటారు.

JavaScript — Filter & Reduce Chaining ▶ Run Code
const total = [80, 30, 55, 20, 90]
  .filter(m => m >= 35)         // మొదట పాస్ అయిన మార్కులు: [80, 55, 90]
  .reduce((t, m) => t + m, 0);  // తర్వాత వాటి మొత్తం: 80 + 55 + 90

console.log(total);
Output:
225

"క్లాస్ లో పాస్ అయిన విద్యార్థుల మొత్తం మార్కులు ఎంత?" అనే పెద్ద సమస్యను లూప్స్, తాత్కాలిక వేరియబుల్స్ లేకుండా కేవలం 3 లైన్లలో సాధించాం. ఇదే ఆధునిక JavaScript Array Methods యొక్క సూపర్ పవర్!

15Part B లో సాధారణ తప్పులు (Common Mistakes)
⚠️ ఇంటర్వ్యూలు & రియల్ కోడింగ్ లో దొర్లే 6 తప్పులు:
  1. సంఖ్యలను compare function లేకుండా sort() చేయడం: [10, 9, 1, 100].sort() అనేది [1, 10, 100, 9] ని ఇస్తుంది. నంబర్స్ కి ఎప్పుడూ .sort((a, b) => a - b) రాయడం మర్చిపోకండి.
  2. map లో { } వాడి return మర్చిపోవడం:
    console.log([1, 2, 3].map(n => { n * 2; }));
    // Output: [ undefined, undefined, undefined ]
    Chapter 13 లో నేర్చుకున్నట్లు బాడీలో { } కర్లీ బ్రాకెట్లు పెడితే explicit గా return n * 2; అని రాయాలి. లేదా ఒకే లైన్ అయితే n => n * 2 అని బ్రాకెట్లు లేకుండా రాయాలి.
  3. ఖాళీ array పై reduce కి ప్రారంభ విలువ ఇవ్వకపోవడం:
    [].reduce((t, n) => t + n);
    // Output: TypeError: Reduce of empty array with no initial value
    ఎల్లప్పుడూ ప్రారంభ విలువగా 0 లేదా తగిన విలువను తప్పనిసరిగా ఇవ్వండి: reduce((t, n) => t + n, 0).
  4. sort మరియు reverse అసలు array ని మారుస్తాయని మర్చిపోవడం:
    const o = [1, 2, 3];
    const r = o.reverse();
    console.log(o, o === r); // Output: [ 3, 2, 1 ] true
    అసలు array సేఫ్ గా ఉండాలంటే, ముందుగా o.slice().reverse() లేదా ఆధునిక బ్రౌజర్లలో o.toReversed() వాడాలి.
  5. slice మరియు splice ల పేర్లను కలగాపులగం చేయడం: slice కేవలం కాపీ చేస్తుంది (Safe), splice అసలు array లోని అంశాలను కట్ చేస్తుంది (Mutates).
  6. forEach లో break వాడాలనుకోవడం: forEach ని మధ్యలో ఆపలేం. break రాస్తే SyntaxError వస్తుంది. మధ్యలోనే ఆపాల్సిన అవసరం ఉంటే for...of లూప్ లేదా some / find వాడాలి.
16ప్రాక్టీస్ ప్రశ్నలు & సమాధానాలు

ఈ క్రింది 8 ప్రశ్నలకు మీ సొంతంగా కోడ్ రాయడానికి ప్రయత్నించండి. ఆ తర్వాత సమాధానాలను పరిశీలించండి:

  1. [12, 18, 25, 30, 15] array లోని సంఖ్యల మొత్తం మరియు సగటు కనుక్కోండి (loop తో).
  2. [45, 12, 89, 34] లో అతి పెద్ద సంఖ్యను loop తో కనుక్కోండి.
  3. [20, 60, 45, 80, 55] లో 50 కంటే ఎక్కువ ఉన్న సంఖ్యలు ఎన్ని? (filter వాడండి).
  4. [100, 200] ధరలను "₹100", "₹200" రూపంలో మార్చండి (map వాడండి).
  5. [3, 14, 21, 8] లో 7 తో భాగింపబడే మొదటి సంఖ్యను కనుక్కోండి (find).
  6. [5, 1, 9, 3] ని తగ్గుతున్న క్రమంలో (descending order) sort చేయండి.
  7. [1, 2, 3, 4, 5, 6] లో సరి సంఖ్యల మొత్తం కనుక్కోండి (filter + reduce chaining).
  8. [1, 2, 3, 4] ని reverse() వాడకుండా, loop తో తిరగేసి కొత్త array తయారు చేయండి.
👉 8 ప్రశ్నల సమాధానాలు చూడండి (Answers with Code & Output)

1. మొత్తం & సగటు:

const nums = [12, 18, 25, 30, 15];
let sum = 0;
for (const n of nums) {
  sum += n;
}
console.log(sum, sum / nums.length);
// Output: 100 20

2. అతి పెద్ద సంఖ్య:

const nums = [45, 12, 89, 34];
let max = nums[0];
for (const n of nums) {
  if (n > max) {
    max = n;
  }
}
console.log(max);
// Output: 89

3. 50 కంటే ఎక్కువ ఉన్న సంఖ్యల లెక్కింపు:

console.log([20, 60, 45, 80, 55].filter(n => n > 50).length);
// Output: 3 (filter ఫలితం [60, 80, 55], దాని .length 3)

4. కరెన్సీ సింబల్ మ్యాపింగ్:

console.log([100, 200].map(p => `₹${p}`));
// Output: [ '₹100', '₹200' ]

5. 7 తో భాగింపబడే మొదటి సంఖ్య:

console.log([3, 14, 21, 8].find(n => n % 7 === 0));
// Output: 14

6. తగ్గుతున్న క్రమంలో sort:

console.log([5, 1, 9, 3].sort((a, b) => b - a));
// Output: [ 9, 5, 3, 1 ]

7. సరి సంఖ్యల మొత్తం (Chaining):

const total = [1, 2, 3, 4, 5, 6]
  .filter(n => n % 2 === 0)
  .reduce((t, n) => t + n, 0);
console.log(total);
// Output: 12 (సరి సంఖ్యలు [2, 4, 6], మొత్తం 12)

8. లూప్ తో అరే రివర్స్ చేయడం:

const original = [1, 2, 3, 4];
const reversed = [];
for (let i = original.length - 1; i >= 0; i--) {
  reversed.push(original[i]);
}
console.log(reversed);
// Output: [ 4, 3, 2, 1 ]

(చివరి index నుండి మొదలుపెట్టి, వెనక్కి వస్తూ ప్రతి విలువను కొత్త array లోకి push చేశాం.)

🚀 మీరే స్వయంగా Try చేయండి! (Shopping Cart Simulation)

ఈ కోడ్ ను మన ఆన్‌లైన్ కంపైలర్ లో రన్ చేసి చూడండి. ఇది ఒక ఇ-కామర్స్ షాపింగ్ కార్ట్. ధరలను మార్చండి, కొత్త వస్తువులను push చేయండి మరియు filter, reduce లు ఎలా పనిచేస్తున్నాయో గమనించండి:

JavaScript — E-Commerce Cart ▶ Run in Compiler
const cart = [250, 120, 80, 300];

const total = cart.reduce((t, p) => t + p, 0);
const expensive = cart.filter(p => p > 100);

console.log("మొత్తం బిల్లు:", total);
console.log("₹100 కంటే ఎక్కువ ధర ఉన్నవి:", expensive);

cart.push(150);
console.log("కొత్త item తో మొత్తం:", cart.reduce((t, p) => t + p, 0));
Output:
మొత్తం బిల్లు: 750
₹100 కంటే ఎక్కువ ధర ఉన్నవి: [ 250, 120, 300 ]
కొత్త item తో మొత్తం: 900
👉 Our Compiler లో JavaScript రన్ చేయండి
🧠 Interactive Telugu Quiz

JavaScript Arrays & Methods నాలెడ్జ్ చెక్

ఈ క్రింది 5 ప్రశ్నలకు సరైన సమాధానాలు ఎంచుకుని మీ అవగాహనను పరీక్షించుకోండి. వెంటనే ఫలితం మరియు తెలుగు వివరణ కనిపిస్తాయి:

❓ ప్రశ్న 1 / 5
1. const items = ["Apple", "Banana", "Mango"]; లో items[0] విలువ ఏమిటి?
❓ ప్రశ్న 2 / 5
2. Array చివరన ఒక కొత్త element ని చేర్చడానికి క్రింది వాటిలో ఏ method ని ఉపయోగిస్తాం?
❓ ప్రశ్న 3 / 5
3. typeof [1, 2, 3] మరియు Array.isArray([1, 2, 3]) ల ఫలితాలు వరుసగా ఏమిటి?
❓ ప్రశ్న 4 / 5
4. [10, 20, 30].map(n => n * 2) ఏమి return చేస్తుంది?
❓ ప్రశ్న 5 / 5
5. JavaScript లో [1, 2] === [1, 2] రాస్తే వచ్చే ఫలితం ఏమిటి?
క్విజ్ ప్రారంభించండి! (మొత్తం 5 ప్రశ్నలు)

📌 సారాంశం (Quick Summary):

Part A: Arrays Basics

  • Array = ఒకే చోట చాలా విలువలను వరుసగా నిల్వ చేసే లిస్ట్: const fruits = ["Apple", "Banana"];
  • Index 0 నుంచి మొదలవుతుంది: చివరి element: arr[arr.length - 1] (లేదా ఆధునిక arr.at(-1)). లేని index undefined ఇస్తుంది.
  • push (చివరన చేర్చు), pop (చివరిది తీసేయి), unshift (మొదట చేర్చు), shift (మొదటిది తీసేయి). ఇవి అసలు array ని మారుస్తాయి (Mutate).
  • const array లోపలి విలువలను మార్చొచ్చు, కానీ సరికొత్త array ని reassignment చేయలేం.
  • లూపింగ్ కోసం ఇండెక్స్ కావాలంటే సాధారణ for loop, కేవలం విలువలు కావాలంటే for...of loop.
  • Arrays ని === తో పోల్చవద్దు. const b = a కొత్త కాపీ కాదు, అదే రిఫరెన్స్. నిజమైన కాపీకి a.slice() వాడాలి.
  • 2D array: matrix[row][column].

Part B: Array Methods

  • forEach (పని చేయి), map (మార్చి కొత్త array ఇవ్వు), filter (షరతుతో వడకట్టు), reduce (అన్నింటినీ ఒకే విలువగా కలుపు).
  • find / findIndex (మొదటి దానిని వెతుకు), some (కనీసం ఒక్కటైనా), every (అన్నీ), includes / indexOf (ఉందా?).
  • slice (కాపీ మాత్రమే చేస్తుంది, అసలుది మారదు) vs splice (కత్తిరించి అసలు array ని మారుస్తుంది).
  • sort కి సంఖ్యల కోసం (a, b) => a - b కంపేర్ ఫంక్షన్ తప్పనిసరి. sort మరియు reverse అసలు array నే మారుస్తాయి.
  • join array ని string గా మారుస్తుంది, concat రెండు arrays ని కలుపుతుంది.
  • map, filter, reduce లను ఒకదాని తర్వాత ఒకటి chain చేయవచ్చు.

👉 తర్వాతి పాఠం: Objects (JSON intro తో) →

ఇప్పటివరకు మనం నంబర్ల (ఇండెక్సుల) ఆధారంగా వరుస క్రమంలో డేటాను నిల్వ చేసే Arrays గురించి నేర్చుకున్నాం. తర్వాతి పాఠంలో ఒక వస్తువు లేదా వ్యక్తి యొక్క సమగ్ర వివరాలను (పేరు, వయసు, చిరునామా) ప్రాపర్టీ పేర్లతో సహా ఒకే చోట నిల్వ చేసే అత్యంత ముఖ్యమైన Objects (మరియు JSON బేసిక్స్) గురించి నేర్చుకుందాం!

15. Objects: properties, methods & JSON intro →