filter() से मिलते-जुलते आइटम्स ढूंढें, फिर map() या forEach() से मान अपडेट करें - स्पष्ट लूप लिखे बिना।
बुनियादी उदाहरण
const students = [
{ Name: "John" },
{ Name: "David" },
{ Name: "Bob" },
{ Name: "Mike" }
];
const nameToChange = "Bob";
// filter से मिलान करने वाले ढूंढें, map से अपडेट करें
students
.filter(obj => obj.Name === nameToChange)
.forEach(obj => obj.Name = "Carol"); // forEach से म्यूटेट
console.log(students);
// [ { Name: 'John' }, { Name: 'David' }, { Name: 'Carol' }, { Name: 'Mike' } ]
वैकल्पिक: map से नई ऐरे बनाएं (इम्यूटेबल)
const updated = students.map(obj =>
obj.Name === nameToChange ? { ...obj, Name: "Carol" } : obj
);
console.log("मूल:", students); // अपरिवर्तित
console.log("नई:", updated); // Bob → Carol
एकाधिक मिलान अपडेट करें
const items = [
{ id: 1, status: 'pending' },
{ id: 2, status: 'pending' },
{ id: 3, status: 'done' }
];
// सभी pending को processing बनाएं
items
.filter(item => item.status === 'pending')
.forEach(item => item.status = 'processing');
console.log(items);
// सभी pending अब processing हैं
findIndex + डायरेक्ट एक्सेस (सिंगल आइटम के लिए तेज़)
const index = students.findIndex(s => s.Name === "Bob");
if (index !== -1) {
students[index].Name = "Carol";
}
चलाने का तरीका
node update-without-loop.js
आउटपुट
[
{ Name: 'John' },
{ Name: 'David' },
{ Name: 'Carol' },
{ Name: 'Mike' }
]
तुलना
| विधि | म्यूटेट करता है | पक्ष | विपक्ष |
|---|---|---|---|
filter + forEach | हां | पठनीय, चेनिंग | दो पास |
map (नई ऐरे) | नहीं | इम्यूटेबल, सुरक्षित | नई ऐरे बनाता है |
findIndex + सीधा एक्सेस | हां | सबसे तेज़ (सिंगल) | केवल पहला मिलान |
for लूप | हां | नियंत्रण, तेज़ | अधिक कोड |
नोट
"बिना लूप के" का अर्थ है स्पष्ट for/while न लिखना - आंतरिक रूप से filter/map/forEach लूप ही उपयोग करते हैं।