روش های جستجوی شی بر اساس پراپرتی مشخص در آرایهای بوسیله جاوااسکریپت
آرایه زیر را در نظر بگیرید:
myArray = [{'id':'73','foo':'bar'},{'id':'45','foo':'bar'}, ...]
فرض کنید که می خواهیم شی با شناسه 45 را در آرایه پیدا کنیم.
یکی از روشهای ساده و سریع استفاده از متد find() است که به شما این امکان را میدهد به سادگی شی مورد نظر را جستجو کنید. برای مثال، با کد زیر میتوانید مقدار foo را کسب کنید:
myArray.find(x => x.id === '45').foo;
این متد اولین اشیائی که شرط مورد نظر را برآورده میکنند به شما برمیگرداند؛ اگر شی ای وجود نداشته باشد، undefined باز میگرداند.
اگر بخواهید موقعیت(index) آن شی را پیدا کنید، میتوانید از findIndex() استفاده کنید:
myArray.findIndex(x => x.id === '45');
در صورتی که بخواهید تمام اشیائی که دارای id برابر با 45 هستند را بدست آورید، میتوانید از متد filter() استفاده کنید:
myArray.filter(x => x.id === '45');
این متد یک آرایه از اشیا را باز می گرداند. برای استخراج مقادیر foo میتوانید از map() به این صورت استفاده کنید:
myArray.filter(x => x.id === '45').map(x => x.foo);
اگر از jQuery استفاده میکنید، میتوانید از تابع grep نیز بهره ببرید:
var result = $.grep(myArray, function(e){ return e.id == id; });
اگر اطمینان دارید شی مورد نظر فقط یک بار در آرایه وجود دارد، میتوانید به سادگی به result[0].foo دسترسی پیدا کنید.
روش دیگری برای بهینهسازی جستجو ایجاد یک شی lookup است:
var lookup = {};
for (var i = 0, len = myArray.length; i < len; i++) {
lookup[myArray[i].id] = myArray[i];
}
با این روش میتوانید با استفاده از lookup[id] به شی مورد نظر دسترسی پیدا کنید که این روش برای انجام جستجوهای مکرر کارایی بالایی دارد.
همه این روشها کارایی و سادگی خاصی دارند و شما میتوانید بسته به نیاز خود یکی از آنها را انتخاب کنید.