تعداد بازدید: 208

Set Standard Build-in Object

Set یک موجودیت با رفتاری شبیه به آرایه است و می تواند در مواقع خاص جایگزین آن شود . این شرایط خاص با توجه به محتوای مورد نظر و این که این بسته collection قرار است به چه شکل جا به جا گردد تعیین می شود.

Set یک جایگزین برای آرایه و Map یک جایگزین برای اشیا می تواند باشد با توجه به شرایطی که ما آن را تعیین می کنیم. این شرایط رابطه مستقیم با ویژگی های این موجودیت های جدید است .معمولا set , map در جریان برنامه مورد استفاده قرار می گیرند و Array , Object برای تبادل اطلاعات میان سرویس ها استفاده می شوند. درنهایت امکان تبدیل هر کدام از این موجودیت ها به آرایه و شئ (و بالعکس) نیز وجود دارد .

ویژگی های Set بسیار نزدیک به آرایه است با این تفاوت که مقدار در آن یکتا است و امکان ثبت دو مقدار تکراری وجود ندارد که بسیار کارگشا در برخی پردازش ها می باشد. همچنین مقادیر با همان ترتیب که وارد شدند قابل پیمایش هستند و جابه جایی در آن اتفاق نمی افتد.

ویژگی های موجودیت Set :

  • قابل پیمایش است و با همان ترتیبی که مقادیر وارد شدند با همان ترتیب در پیمایش قابل دسترس است.
  • مقادیر در آن یکتا است و امکان ثبت مقدار تکراری وجود ندارد .
  • از پروتکل پیمایش پیروی می کند و برای پیمایش آن می توان از for…of استفاده کرد و همچنین متد هایی برای دریافت کلید ها و مقادیر دارد.

Syntax تعریف یک Set به شکل زیر است . هم می توان در constructor این مقادیر را initialize کرد و هم می توان در جریان برنامه پس از instance با متد add.

let s1 = new Set(['ahmad','ali'])
s1.add('jafar')
console.log(s1)
//Set(3) [ "ahmad", "ali", "jafar" ]

نحوه یکتایی در مقادیر در Set دقیقا مطابق با عبارت === می باشد یعنی پیش از افزودن باید چک شود که مقداری با این value و دقیقا همین type نداشته باشیم . به این شکل که فرض کنید در آرایه پیش از آن که یک المان را بیفزاییم وجود آن در آرایه را چک کنیم ( Array.prototype.includes).

Set Property

size برای تعیین تعداد اعضا

Set Instance Methods

Map.prototype.clear برای پاک کردن لیست اعضا
Map.prototype.delete(value) پاک کردن بر اساس مقدار . باید مقدار را به آن بدهیم تا پاک کنیم. در پیمایش به راحتی قابل انجام است.
Map.prototype.has(value) بررسی وجود یا عدم وجود یک مقدار در collection. ورودی این متد مقدار است.
Map.prototype.keys() دریافت لیست کلید ها در قالب یک موجودیت قابل پیمایش ( کلید ها در این جا یک سری اعداد هستند)
Map.prototype.value() دریافت لیست مقادیر در قالب یک موجودیت قابل پیمایش
Map.prototype.entries() دریافت لیست اعضا به صورت کلید مقدار در قالب یک موجودیت قابل پیمایش(کلید ها در این جا اعداد هستند)
Map.prototype.forEach(callback) امکان دریافت یک callback برای پیمایش لیست کلید ها و مقادیر اعضا

متدها در این ساختار داده بسیار نزدیک به map می باشد با این تفاوت که در ورودی آن ها به جای دریافت کلید مقدار را دریافت می کنیم . به طور مثال متد has, delete .

const s = new Set();
s.add("foo");

console.log(s.has("foo"));  // true
console.log(s.has("bar"));  // false
const s = new Set();
s.add("foo");

console.log(s.delete("foo"));

دقت داشته باشید که وارد کردن مقدار تکراری در یک موجودیت Set به این ترتیب است که مقدار می تواند به صورت تکراری وارد شود . در این صورت مقدار بروزرسانی می شود و خطایی نخواهیم داشت.

پیمایش در Set

برای پیمایش می توان از for…in statement و متد های keys,values,etries,forEach استفاده کرد.

let s = new Set([
  'papillon','free wild beest','pelican',
])
console.log('for of statement------------------------------------------')
for(let item of s){
  console.log(item)
}
console.log('loop through keys-----------------------------------------')
for(let key of s.keys()){
  console.log(key)
}
console.log('loop through values---------------------------------------')
for(let value of s.values()){
  console.log(value)
}
console.log('loop through items---------------------------------------')
for(let item of s.entries()){
  console.log(item)
}
console.log('forEach instance method----------------------------------')
s.forEach((item,key) => {
  console.log(item,key)
})

استفاده از Set در کار با Dom

let s = new Set
s.add(document.body)
console.log(s.has(document.querySelector('body')))

رابطه Set با آرایه ها

let s = new Set([1,2,3,4])

console.log(Array.from(s))
console.log([...s])

Set Operations

آرایه ها مفهوم بسیار نزدیکی در مجموعه ها در علوم ریاضی دارند. به طبع آن عملیات های اجتماع اشتراک و اختلاف و اختلاف متقارن هم در مجموعه های ریاضی و هم در آرایه ها و هم در Set وجود دارد.

set-array-object-actions

Union

let s1 = new Set([1,2,3,4,5])
let s2 = new Set([6,7,8,9,10])

let union = new Set([...s1])
/*let union = new Set(s1)*/
for(let s of s2){
  union.add(s)
}

console.log(union)

Diffrence

let s1 = new Set([1,2,3,4])
let s2 = new Set([4,5,6])

let diffrence = new Set([...s1].filter( (value) => {
  return !s2.has(value)
}))
console.log(diffrence)

Intersect

let s1 = new Set([1,2,3,4])
let s2 = new Set([4,5,6])

let intersect = new Set([...s1].filter( (value) => {
  return s2.has(value)
}))
console.log(intersect)

Symmetric Diffrence

let s1 = new Set([1,2,3,4,5,6])
let s2 = new Set([4,5,6,7,8,9])

let sd = new Set([...s1])

for(let item of s2){
  if(sd.has(item)){
    sd.delete(item)
  }else{
    sd.add(item)
  }
}

console.log(sd)

Set Examples

یک مثال کاربردی این است که مثلا بخواهیم یک سری اعضای تکراری را در یک آرایه حذف کنیم:

let arr = [1,2,3,4,5,6,6,6,6,5,5,3,1];
let s = new Set(arr)

console.log([...s])

یک مثال کاربردی این که یک تابع بنویسیم که چک کند که آیا یک id در یک سند dom تکراری است یا خیر

let elements = document.querySelectorAll('#greathing')
let ids = Array.from(elements).map( (e) => { e.id })
let s = new Set(ids)
console.assert(s.size == ids.length)

 

مطالب مشابه

HTML Element Node

هر سند html از ساختار های مختلفی تشکیل شده است. این ساختار به صورت درختی است و هر قسمت از این ساختار یک موجودیت خاص می...

Javascript Symbol

در جاوا اسکریپت ما دو دسته داده داریم . دسته اول Primitive است و دسته دوم non-primitive است. داده های از نوع Primitive...

Class in Javascript

class ها یک قابلیت برای تعریف یک سری نوع داده های خاص بر اساس موجودیت های جاری در سیستم است . به طور مثال برای تعریف یک...

Browser Object Model – BOM

هر محیط اجرای جاوا اسکریپت شامل یک شئ global است که برنامه در آن جریان دارد . این شئ در جاوا اسکریپت بسته به نوع محیط...

اشتراک گذاری :

مدیر وب سایت گنوتک . برنامه نویسی رو با زبان C در هفده سالگی شروع کردم . در حال حاضر به برنامه نویسی php برپایه معماری MVC , HMVC و همچنین سیستم مدیریت محتوای WordPress و فریم ورک محبوب لاراول علاقه مند هستم و دوست دارم اطلاعاتم رو با شما به اشتراک بگذارم.

۰ دیدگاه برای Set Standard Build-in Object

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *