از طریق منوی جستجو مطلب مورد نظر خود در وبلاگ را به سرعت پیدا کنید
حذف عنصر از یک آرایه در جاوا اسکریپت در جاوا اسکریپت، و درست مانند بسیاری از زبان های دیگر، در برخی مواقع به احتمال زیاد نیاز به حذف یک عنصر از آرایه خواهید داشت. بسته به روی مورد استفاده شما این می تواند به آسانی استفاده از دستورات داخلی ()shift یا pop() باشد، اما فقط در صورتی کار می کند که عنصر در …
سرفصلهای مطلب
در جاوا اسکریپت، و درست مانند بسیاری از زبانهای دیگر، در برخی مواقع احتمالاً باید یک عنصر را از یک آرایه حذف کنید. بسته به روی مورد استفاده شما این می تواند به آسانی استفاده از داخلی باشد shift()
یا pop()
دستورات، اما این فقط در صورتی کار می کند که عنصر به ترتیب در ابتدا یا انتهای آرایه باشد. بسیاری از موارد استفاده از شما نیاز دارند که از حذف یک عنصر از یک مکان دلخواه در آرایه پشتیبانی کنید، که در اینجا به آن خواهیم پرداخت.
من همچنین توضیح خواهم داد که چگونه می توان به روش های دیگر به این هدف رسید، مانند استفاده از کتابخانه های ابزاری که آن را برای شما مدیریت می کنند، یا اگر باید از مرورگرهای قدیمی مانند IE 8 پشتیبانی کنید.
جاوا اسکریپت وانیلی
برای حذف یک عنصر خاص از یک آرایه در جاوا اسکریپت، ابتدا باید مکان عنصر را پیدا کرده و سپس آن را حذف کنیم.
یافتن مکان بر اساس مقدار را می توان با indexOf()
متد، که ایندکس را برای the اولین اتفاق مقدار داده شده یا -1 اگر در آرایه نباشد.
با استفاده از این مقدار شاخص، می خواهیم عنصر را حذف کنیم، که می توانیم با آن انجام دهیم splice()
روش.
function removeElement(array, elem) {
var index = array.indexOf(elem);
if (index > -1) {
array.splice(index, 1);
}
}
بنابراین اگر indexOf
و splice
آیا تنها دو روشی هستند که برای رسیدن به این هدف نیاز داریم، پس بیانیه اگر برای چیست؟ با بررسی اینکه آیا شاخص بزرگتر از 1- است، بررسی می کنیم که عنصر واقعاً در آرایه وجود دارد. اگر نبود، و index
-1 است، سپس از این مقدار در استفاده می شود splice
در واقع حذف خواهد شد آخر عنصری در آرایه که آن چیزی نیست که ما می خواهیم.
به خاطر داشته باشید که این فقط اولین رخداد عنصر داده شده را حذف می کند. برای روشن شدن این موضوع به مثال زیر مراجعه کنید:
var arr = (1, 2, 3, 3, 4, 5);
removeElement(arr, 3);
console.log(arr);
// Output:
// ( 1, 2, 3, 4, 5 )
توجه داشته باشید که “3” دوم هنوز وجود دارد.
اگر بخواهیم حذف کنیم هر نمونه از عنصر مشخص شده، میتوانیم بهجای عبارت if، با یک حلقه while به این امر برسیم:
function removeAllElements(array, elem) {
var index = array.indexOf(elem);
while (index > -1) {
array.splice(index, 1);
index = array.indexOf(elem);
}
}
اکنون با اجرای همان کد مثال بالا، موارد زیر را دریافت می کنیم:
var arr = (1, 2, 3, 3, 4, 5);
removeAllElements(arr, 3);
console.log(arr);
// Output:
// ( 1, 2, 4, 5 )
همانطور که می بینید، هر دو عنصر ‘3’ اکنون از آرایه حذف شده اند.
کتابخانه ها
با توجه به این که این یک مورد استفاده رایج است، اکثر (اگر نه همه) کتابخانه های ابزار دارای عملکردی برای حذف عناصر از یک آرایه هستند.
لوداش
برای حذف یک عنصر، Lodash دارای این است remove()
روش. اگر یک مورد استفاده ساده دارید و فقط می خواهید یک عنصر اولیه (مانند یک عدد) را حذف کنید، این تابع احتمالاً برای شما بیش از حد است زیرا باید تابعی را پاس کنید که تعیین می کند آیا عنصر با معیارهای شما مطابقت دارد یا خیر.
بنابراین، برای مثال، در اینجا روش حذف عدد 3 آمده است:
var arr = (1, 2, 3, 3, 4, 5);
_.remove(arr, function(e) {
return e === 3;
});
console.log(arr);
// Output:
// ( 1, 2, 4, 5 )
توجه داشته باشید که تمام نمونه های 3 را که رفتار پیش فرض است حذف کرده است.
با این حال، این روش برای حذف عناصر پیچیده تر مانند اشیاء مفیدتر است. به عنوان مثال، شاید بخواهید تمام اشیاء “افراد” را در صورتی که زیر 21 سال سن دارند از یک آرایه حذف کنید:
var people = (
{name: 'Billy', age: 22},
{name: 'Sally', age: 19},
{name: 'Timmy', age: 29},
{name: 'Tammy', age: 15}
);
_.remove(people, function(e) {
return e.age < 21
});
console.log(people);
// Output
// ( { name: 'Billy', age: 22 }, { name: 'Timmy', age: 29 } )
این کار کمی شبیه به filter
متد، با این تفاوت که عناصر را از آرایه ای که پاس می دهید حذف می کند و سپس آرایه ای از عناصر حذف شده را از خود متد برمی گرداند.
تاکید کنید
کتابخانه ابزار Underscore دارای روشی مشابه با Lodash است که نامیده می شود reject
. این کار بسیار مشابه است، به جز یک تفاوت قابل توجه. آرایه به دست آمده از متد برگردانده می شود و آرایه ای که به آن ارسال می کنید بدون تغییر باقی می ماند.
برای نمونه کد زیر را ببینید:
var arr = (1, 2, 3, 3, 4, 5);
var ret = _.reject(arr, function(e) {
return e === 3;
});
console.log(arr);
console.log(ret);
// Output:
// ( 1, 2, 3, 3, 4, 5 )
// ( 1, 2, 4, 5 )
باز هم مثل لوداش remove
روش، reject
این روش برای موارد پیچیده تر، مانند حذف اشیاء یا گروهی از عناصر، بهترین گزینه است.
پشتیبانی از اینترنت اکسپلورر
اگر پروژه شما نیاز دارد که از نسخه های قدیمی اینترنت اکسپلورر، به ویژه IE 8 در این مورد پشتیبانی کنید، پس indexOf()
روش برای شما کار نخواهد کرد زیرا در این نسخه از IE پشتیبانی نمی شود.
برای مقابله با این، یک راه حل این است که روش را تغییر دهید، همانطور که در نشان داده شده است این پاسخ سرریز پشته:
if (!Array.prototype.indexOf)
{
Array.prototype.indexOf = function(elt /*, from*/)
{
var len = this.length >>> 0;
var from = Number(arguments(1)) || 0;
from = (from < 0)
? Math.ceil(from)
: Math.floor(from);
if (from < 0)
from += len;
for (; from < len; from++)
{
if (from in this &&
this(from) === elt)
return from;
}
return -1;
};
}
با توجه به پست SO، این پیاده سازی است indexOf
از MDN، استفاده شده در فایرفاکس/اسپایدرمونکی.
گزینه دیگر استفاده از آن خواهد بود jQuery
‘s $.inArray()
روش:
var arr = (1, 2, 3, 3, 4, 5);
var idx = $.inArray(3, arr);
console.log(idx);
// Output:
// 2
این تقریباً معادل است indexOf
، که سپس می توان از آن برای نوشتن استفاده کرد removeElement
روشی که در بخش اول این مقاله نشان داده شده است.
منتشر شده در 1403-01-26 04:57:16