জাভাস্ক্রিপ্টে map/ reduce/ filter/ ইত্যাদি কোনও উপায় আছে Setবা আমার নিজের লিখতে হবে?
এখানে কিছু বুদ্ধিমান Set.prototypeএক্সটেনশন রয়েছে
Set.prototype.map = function map(f) {
var newSet = new Set();
for (var v of this.values()) newSet.add(f(v));
return newSet;
};
Set.prototype.reduce = function(f,initial) {
var result = initial;
for (var v of this) result = f(result, v);
return result;
};
Set.prototype.filter = function filter(f) {
var newSet = new Set();
for (var v of this) if(f(v)) newSet.add(v);
return newSet;
};
Set.prototype.every = function every(f) {
for (var v of this) if (!f(v)) return false;
return true;
};
Set.prototype.some = function some(f) {
for (var v of this) if (f(v)) return true;
return false;
};
একটু সেট করা যাক
let s = new Set([1,2,3,4]);
এবং কিছু বোকা সামান্য ফাংশন
const times10 = x => x * 10;
const add = (x,y) => x + y;
const even = x => x % 2 === 0;
এবং দেখুন তারা কীভাবে কাজ করে
s.map(times10); //=> Set {10,20,30,40}
s.reduce(add, 0); //=> 10
s.filter(even); //=> Set {2,4}
s.every(even); //=> false
s.some(even); //=> true
সুন্দর না? হ্যাঁ, আমিও তাই মনে করি। কুরুচিপূর্ণ পুনরায় ব্যবহারকারীর সাথে এর তুলনা করুন
// puke
let newSet = new Set();
for (let v in s) {
newSet.add(times10(v));
}
এবং
// barf
let sum = 0;
for (let v in s) {
sum = sum + v;
}
জাভাস্ক্রিপ্টে কোনও সফল করার জন্য mapএবং reduceব্যবহার করার আরও ভাল কোনও উপায় আছে কি Set?
var s = new Set([1,2,3,4]); s.map((a) => 42);। এটি উপাদানগুলির সংখ্যা পরিবর্তন করে, যা mapসাধারণত করা উচিত নয়। আরও খারাপ যদি আপনি কেবল রক্ষিত অবজেক্টের কিছু অংশের সাথে তুলনা করেন, কারণ প্রযুক্তিগতভাবে এটি অনির্দিষ্ট un
forEach, তবে কমপক্ষে সেই দৃশ্যের জন্য বিদ্যমান, তবে কেন নেই reduce?
Setহ'ল সেটগুলি ফ্যান্টেক্টর নয়।