از طریق منوی جستجو مطلب مورد نظر خود در وبلاگ را به سرعت پیدا کنید
در آرایه ای از اشیاء جاوا اسکریپت، یک شی را با شناسه پیدا کنید
سرفصلهای مطلب
معرفی
جاوا اسکریپت که یکی از محبوب ترین زبان های برنامه نویسی است، اغلب برای دستکاری آرایه ها و اشیاء استفاده می شود. این می تواند شامل مکان یابی یک شی با شناسه آن در یک آرایه از اشیا باشد. اما چرا دقیقاً باید این کار را انجام دهیم و چگونه می توانیم به آن دست یابیم؟ در این بایت، ما دلایل پشت این موضوع، اصول اولیه آرایه ها و اشیاء جاوا اسکریپت و در نهایت، روش اصلی برای یافتن یک شی با شناسه را بررسی خواهیم کرد.
چرا مکان یابی اشیا با شناسه؟
تصور کنید که روی یک پروژه در مقیاس بزرگ با مقدار قابل توجهی داده کار می کنید، که ممکن است به عنوان آرایه ای از اشیاء ذخیره شود. هر شی نشان دهنده یک موجودیت منحصر به فرد، مانند یک کاربر یا یک محصول است. حال، فرض کنید باید داده های یک کاربر خاص را بازیابی کنید یا جزئیات یک محصول را به روز کنید. چگونه می خواهید در مورد این اقدام کنید؟ مطمئناً، میتوانید کل آرایه را تا زمانی که شی مورد نیاز را پیدا کنید، حلقه بزنید، اما این میتواند ناکارآمد باشد، به خصوص با آرایههای بزرگ.
اینجاست که شناسه ها وارد عمل می شوند. شناسهها معمولاً شناسههای منحصربهفردی هستند که به هر شی اختصاص داده میشوند و اغلب برای مکانیابی سریع و دقیق اشیاء خاص در آرایه استفاده میشوند. مکان یابی اشیا با شناسه آنها یک روش معمول در برنامه نویسی است و برای دسترسی سریع/آسان به داده ها مهم است.
جاوا اسکریپت پایه: آرایه ها و اشیا
قبل از اینکه به روش اصلی تعیین مکان یک شی با شناسه بپردازیم، باید درک کاملی از آرایه ها و اشیاء جاوا اسکریپت داشته باشید.
آرایه در جاوا اسکریپت یک شیء فهرست مانند سطح بالا است که برای ذخیره مجموعه ها یا دنباله ای از آیتم های مرتب شده استفاده می شود. این موارد می توانند هر نوع داده جاوا اسکریپت، از جمله اشیاء باشند.
let array = (1, 'two', {id: 3, name: 'Three'});
از طرف دیگر یک شی یک موجودیت مستقل با ویژگی ها و انواع است. معمولاً برای مدلسازی اقلام دنیای واقعی، مانند یک کاربر یا یک محصول در سبد خرید استفاده میشود.
let object = {
id: 1,
name: 'Product One',
price: 100
};
آرایه ای از اشیا به سادگی آرایه ای است که در آن هر آیتم یک شی است.
let arrayOfObjects = (
{id: 1, name: 'Object One'},
{id: 2, name: 'Object Two'},
{id: 3, name: 'Object Three'}
);
یافتن یک شی با شناسه
در چند بخش بعدی ما چند روش مختلف را مشاهده خواهیم کرد که در آنها می توانید یک شی را با شناسه در آرایه ای از اشیاء پیدا کنید.
با استفاده از پیدا کردن روش
را find
متد یک تابع داخلی در جاوا اسکریپت است که می تواند برای مکان یابی یک شی با شناسه (یا ویژگی دیگر) آن در آرایه ای از اشیاء استفاده شود. این متد یک تابع ارائه شده را روی هر آیتم آرایه و اجرا می کند اولین مورد را برمی گرداند که برای آن تابع مقدار صدق را برمی گرداند. اگر چنین موردی یافت نشد، برمی گردد undefined
.
در اینجا مثالی از روش استفاده از آن آورده شده است find
روش:
let array = (
{ id: 1, name: 'John' },
{ id: 2, name: 'Jane' },
{ id: 3, name: 'Joe' }
);
let result = array.find(obj => obj.id === 2);
console.log(result);
// Output: { id: 2, name: 'Jane' }
در این مثال، find
متد برای مکان یابی شی با شناسه 2 در آرایه استفاده می شود. تابع فلش obj => obj.id === 2
به منتقل می شود find
متد به عنوان آرگومان، که هر شی را بررسی می کند id
دارایی تا زمانی که مطابقت پیدا کند.
این روش زمانی بهترین است که شما فقط یک مورد برای پیدا کردن دارید. همچنین باید قبل از استفاده از آن از وجود آن اطمینان حاصل کنید result
به نوعی چون ممکن است اینطور باشد undefined
.
با استفاده از فیلتر کنید روش
را filter
متد یکی دیگر از عملکردهای مفید برای یافتن یک شی توسط ID در آرایه ای از اشیا است. بر خلاف find
روش، که برمی گرداند اولین مطابقت پیدا می کند، filter
روش برمی گردد همه در یک آرایه جدید مطابقت دارد.
در اینجا روش استفاده شما آمده است filter
:
let array = (
{ id: 1, name: 'John' },
{ id: 2, name: 'Jane' },
{ id: 2, name: 'Joe' }
);
let result = array.filter(obj => obj.id === 2);
console.log(result);
// Output: ( { id: 2, name: 'Jane' }, { id: 2, name: 'Joe' } )
در این مثال، filter
متد آرایه ای از تمام اشیاء را با شناسه 2 برمی گرداند. این می تواند به ویژه زمانی مفید باشد که شما شناسه های غیر منحصر به فرد در آرایه خود داشته باشید. از آنجایی که شناسه ها رایج هستند، این امر چندان رایج نیست معمولا منحصر بفرد. این روش زمانی بسیار مفید است که میخواهید چندین شی را پیدا کنید که ممکن است ویژگی مشابهی داشته باشند.
من همچنین آن را کمی امن تر از find
از آنجایی که همیشه یک آرایه (حتی اگر خالی) را به جای آرایه برمی گرداند undefined
.
با استفاده از a برای حلقه
در حالی که find
و filter
استفاده از روش ها آسان است، ممکن است شرایطی وجود داشته باشد که ترجیح دهید از روش های سنتی استفاده کنید for
حلقه برای یافتن یک شی توسط ID. اگر با مرورگرهای قدیمیتری کار میکنید که از آن پشتیبانی نمیکنند، ممکن است این اتفاق بیفتد find
و filter
روش ها، یا اگر به کنترل بیشتری بر روی تکرار نیاز دارید process. به عنوان مثال، زمانی که چیزی را که به دنبال آن هستید پیدا کردید، به راحتی می توانید از حلقه خارج شوید یا می توانید continue
اگر میخواهید کدهای دیگر را رد کنید، اجرا کنید.
بیایید ببینیم چگونه می توانیم از a استفاده کنیم for
حلقه برای یافتن یک شی توسط ID:
let array = (
{ id: 1, name: 'John' },
{ id: 2, name: 'Jane' },
{ id: 3, name: 'Joe' }
);
let result;
for (let i = 0; i < array.length; i++) {
if (array(i).id === 2) {
result = array(i);
break;
}
}
console.log(result);
// Output: { id: 2, name: 'Jane' }
را for
حلقه روی هر شیء در آرایه تکرار می شود تا زمانی که یک شی با شناسه 2 پیدا کند، در این مرحله از حلقه خارج می شود.
خطاهای رایج
چند خطای متداول وجود دارد که ممکن است با آنها روبرو شوید که در اینجا نگاهی به آنها خواهیم داشت.
Uncaught TypeError: نمی توان ویژگی را خواند
این خطا معمولاً زمانی رخ می دهد که شما سعی می کنید به یک ویژگی از دسترسی پیدا کنید null
یا undefined
. به عنوان مثال، اگر سعی کنید یک شی را با شناسه ای که در آرایه وجود ندارد پیدا کنید، find
روش باز خواهد گشت undefined
، و تلاش برای دسترسی به یک ویژگی شیء برگشتی این خطا را ایجاد می کند.
let array = (
{ id: 1, name: 'John' },
{ id: 2, name: 'Jane' },
{ id: 3, name: 'Joe' }
);
let result = array.find(obj => obj.id === 4);
console.log(result.name);
// Output: Uncaught TypeError: Cannot read property 'name' of undefined
قبل از تلاش برای دسترسی به خصوصیات آن، حتماً همیشه بررسی کنید که آیا شی وجود دارد یا خیر!
X یک تابع نیست
یکی دیگر از خطاهای رایجی که ممکن است با آن مواجه شوید این است X is not a function
. جای تعجب نیست، این معمولا زمانی اتفاق میافتد که میخواهید چیزی را فراخوانی کنید که تابع نیست.
به عنوان مثال، اگر از نسخه قدیمی جاوا اسکریپت استفاده می کنید که از آن پشتیبانی نمی کند find
روش، ممکن است با این خطا مواجه شوید.
let array = ({id: 1}, {id: 2}, {id: 3});
let id = 3;
let result = array.find(item => item.id === id);
در این مورد، شما دریافت خواهید کرد TypeError: array.find is not a function
.
بجای find
، می توانید از a استفاده کنید for
حلقه به عنوان جایگزین:
let array = ({id: 1}, {id: 2}, {id: 3});
let id = 3;
let result;
for (let i = 0; i < array.length; i++) {
if (array(i).id === id) {
result = array(i);
break;
}
}
نتیجه
در این بایت، ما یاد گرفتیم که چگونه با استفاده از روش های مختلف، یک شی را با شناسه در یک آرایه جاوا اسکریپت پیدا کنیم. ما همچنین به خطاهای رایجی که ممکن است در آن رخ دهد نگاه کرده ایم process و روش اجتناب از آنها
(برچسبها برای ترجمه)# جاوا اسکریپت
منتشر شده در 1402-12-27 09:58:06