دریافت تمام مقادیر منحصر به فرد از یک آرایه در جاوااسکریپت
برای حذف تکرارها از یک آرایه در جاوااسکریپت، چندین روش وجود دارد که هر کدام مزایا و معایب خاص خود را دارند. در ادامه این روشها را بررسی میکنیم:
1. استفاده از filter و indexOf:
با استفاده از متد filter، میتوانید آرایهای با مقادیر منحصر به فرد دریافت کنید. در این روش، یک تابع کمکی تعریف میشود که بررسی میکند آیا مقدار جاری، اولین بار است که در آرایه ظاهر شده است یا خیر. اگر نه، به عنوان تکراری در نظر گرفته میشود و حذف میگردد:
function onlyUnique(value, index, array) {
return array.indexOf(value) === index;
}
var a = ['a', 1, 'a', 2, '1'];
var unique = a.filter(onlyUnique);
console.log(unique); // ['a', 1, 2, '1']
2. استفاده از Set و اپراتور گسترش در ES6:
این روش یکی از راههای سریع و ساده برای حذف تکرارها است. با استفاده از شی Set که فقط مقادیر منحصر به فرد را ذخیره میکند، میتوانید آرایهای جدید ایجاد کنید:
let uniqueItems = [...new Set(items)];
این روش برای آرایههایی که فقط شامل مقادیر اولیه (مانند عدد و رشته) هستند کار میکند. به عنوان مثال:
var myArray = ['a', 1, 'a', 2, '1'];
let unique = [...new Set(myArray)];
console.log(unique); // ['a', 1, 2, '1']
3. استفاده از اشیا برای جلوگیری از تکرار:
میتوانید با استفاده از یک شیء به عنوان دیکشنری، مقادیر تکراری را حذف کنید. در این روش مقادیر محلی به کلیدها تبدیل میشوند و تنها کلیدها برای ساخت آرایه جدید استفاده میشوند:
function uniqueArray(arr) {
var j = {};
arr.forEach(function(v) {
j[v + '::' + typeof v] = v;
});
return Object.keys(j).map(function(v) {
return j[v];
});
}
4. توجه به مقادیر پیچیده (اشیا):
ذکر این نکته مهم است که متدهایی که برای مقادیر کمپلکس استفاده میشوند باید به نحوی مدیریت شوند، زیرا دو شی با مقادیر یکسان هرگز مساوی نیستند. برای این منظور میتوانید از شناسه شی در صورت وجود یا JSON.stringify برای تبدیل اشیا به رشته استفاده کنید. این کار باعث میشود که مقادیر یکتا شناسایی شوند:
function uniqueObjects(arr) {
const unique = {};
arr.forEach(item => {
unique[JSON.stringify(item)] = item; // unique[item.id] = item
});
return Object.values(unique);
}
به طور کلی، انتخاب روش مناسب بستگی به نوع دادهها و نیازهای خاص پروژه دارد. برای آرایههایی با دادههای اولیه، استفاده از Set سریعترین و سادهترین راه است، در حالی که برای دادههای پیشرفتهتر، نیاز به مدیریت بیشتری مانند تبدیل به رشته وجود دارد.