জাভাস্ক্রিপ্টে 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
হ'ল সেটগুলি ফ্যান্টেক্টর নয়।