কীভাবে jQuery ব্যবহার করে অ্যারে থেকে নির্দিষ্ট মান সরিয়ে নেওয়া যায়


419

আমার দেখতে এমন অ্যারে রয়েছে যা দেখতে দেখতে: var y = [1, 2, 3];

আমি 2অ্যারে থেকে অপসারণ করতে চাই y

আমি কীভাবে jQuery ব্যবহার করে কোন অ্যারে থেকে একটি নির্দিষ্ট মান সরিয়ে ফেলতে পারি? আমি চেষ্টা করেছি pop()কিন্তু এটি সর্বদা শেষ উপাদানটিকে সরিয়ে দেয়।


8
সতর্কতা : সর্বাধিক উত্সাহিত উত্তরগুলির কিছুতে পার্শ্ব প্রতিক্রিয়া হতে পারে, উদাহরণস্বরূপ, অ্যারেতে উপাদানটি অপসারণ না করার সময় ভুল অপারেশন করা। যত্ন সহ তাদের ব্যবহার করুন
রিকার্ডো

এই উত্তর আমার জন্য কাজ, প্লেইন জাভাস্ক্রিপ্ট সঙ্গে stackoverflow.com/a/5767357/4681687
chimos

স্প্লাইস () এবং $ .আরআর () এর ব্যবহারের অধীনে আমার মন্তব্য দেখুন, আমি একটি লুপ ব্যবহার না করেই এই সমস্যাটি সমাধান করেছি, এবং এটি পরিষ্কার।
ব্যবহারকারী 253780

উত্তর:


619

একটি কার্যনির্বাহী JSFIDDLE LE

আপনি এর মতো কিছু করতে পারেন:

var y = [1, 2, 2, 3, 2]
var removeItem = 2;

y = jQuery.grep(y, function(value) {
  return value != removeItem;
});

ফলাফল:

[1, 3]

http://snipplr.com/view/14381/remove-item-from-array-with-jquery/


2
এটি একটি সুসংবাদ এবং হ্যাঁ সঠিক সংশোধন দরকার ছিল :)
সরফরাজ

2
আমার মনে হয় যে ডিফল্ট জেএস পদ্ধতি সম্পর্কে @ ব্যবহারকারী 113716 উত্তরটি সঠিক উপায়। যে কোনও দেশীয় পদ্ধতি সর্বদা পছন্দসই এবং দ্রুত হবে।
নিওসউফ

114
এই উত্তরটি কি সম্পূর্ণ ভুল নয়? এটি অনুপস্থিত আইটেমটির সাথে একটি নতুন অ্যারে তৈরি করছে, অ্যারে থেকে কোনও আইটেম সরিয়ে নেই। এগুলি মোটেও একই জিনিস নয়।
জেমস মুর

5
এটি ও (এন) এর জটিলতার সাথে অপসারণ ... অ্যারেতে যত বেশি মান হবে, এটি সবচেয়ে খারাপ হবে ...
লিথ

2
ও (এন) এর জটিলতা কোনও সমস্যা নয়।
ওমর তারিক

370

JQuery এর সাহায্যে আপনি এইভাবে একটি একক-লাইন অপারেশন করতে পারেন:

উদাহরণ: http://jsfiddle.net/HWKQY/

y.splice( $.inArray(removeItem, y), 1 );

নেটিভ .splice()এবং jQuery এর ব্যবহার করে $.inArray()


13
@ এলানকিরান - আপনাকে স্বাগতম : ও) আমার নোট করা উচিত যে এটি কেবল প্রথম উদাহরণটি সরিয়ে ফেলবে। যদি অপসারণের জন্য একাধিক থাকে তবে এটি কার্যকর হবে না।
ব্যবহারকারী 113716

7
আমি সরানো আইটেমটিকে এমন কোনও মানতেও পরিবর্তন করেছি যা অ্যারেতে নেই এবং এটি অ্যারের শেষ আইটেমটি সরিয়ে ফেলে। আপনি যদি সরানো আইটেমটির অস্তিত্ব সম্পর্কে নিশ্চিত না হন তবে এটি ব্যবহার করুন: y = $ .grep (y, ফাংশন (ভাল) {রিটার্ন ভাল! = সরানো আইটেম;});
সলবার্ন

52
সতর্কতা - ভুল আইটেম মুছে ফেলতে পারে! in .আরআরে -1 প্রদান করে যদি মানটি উপস্থিত না থাকে এবং .splice একটি 'fromণাত্মক সূচককে' শেষ থেকে 'হিসাবে বিবেচনা করে তাই আপনি যে মানটি অপসারণের চেষ্টা করছেন তা যদি উপস্থিত না থাকে তবে পরিবর্তে অন্য কিছু মান মুছে ফেলা হবে। এছাড়াও $ .grep সমস্ত ঘটনা সরিয়ে ফেলবে যখন এই পদ্ধতিটি কেবল প্রথমটিকে সরিয়ে ফেলবে।
রায়ান উইলিয়ামস

1
উপরে বর্ণিত উভয় সমস্যার সমাধানের জন্য, এর whileমতো একটি লুপ এবং একটি অস্থায়ী ভেরিয়েবল ব্যবহার করুন :var found; while ((found = $.inArray(removeItem, y)) !== -1) y.splice(found, 1);

1
যদিও এটি .indexOf()jQuery এর পরিবর্তে ES5 এর সাথে অনেক ভাল, কারণ আপনি পরবর্তী অনুসন্ধানের সূচনা পয়েন্ট হিসাবে পাওয়া সর্বশেষ সূচকটি ব্যবহার করতে পারেন, যা প্রতিবার পুরো অ্যারে অনুসন্ধানের চেয়ে অনেক বেশি দক্ষ। var found=0; while ((found = y.indexOf(removeItem, found)) !== -1) y.splice(found, 1);

50

jQuery.filterপদ্ধতি দরকারী। এটি Arrayবস্তুর জন্য উপলব্ধ ।

var arr = [1, 2, 3, 4, 5, 5];

var result = arr.filter(function(elem){
   return elem != 5; 
});//result -> [1,2,3,4]

http://jsfiddle.net/emrefatih47/ar0dhvhw/

একমাস্ক্রিপ্ট 6 এ:

let values = [1,2,3,4,5];
let evens = values.filter(v => v % 2 == 0);
alert(evens);

https://jsfiddle.net/emrefatih47/nnn3c2fo/


4
প্রস্তাবিত সমাধানগুলির মধ্যে সবচেয়ে ভাল কাজ করার কথা মনে হচ্ছে, যদিও এটি বাস্তবে বিদ্যমান অ্যারে পরিবর্তন করে না বরং একটি নতুন তৈরি করে। এটি অ-বিদ্যমান মান বা একটি খালি অ্যারের সাথেও কাজ করে। জেএসফিডেলে দ্রুত সম্পাদনা পরীক্ষা করেছিলাম: 800.000 মান সহ একটি অ্যারে সহ এটি সম্পূর্ণ হতে প্রায় 6 সেকেন্ড সময় নিয়েছিল। যদিও এটি দ্রুত কিনা তা নিশ্চিত নয়।
ফ্লো

2
এই সমাধানটি ভ্যানিলা জেএস হাই অর্ডার ফাংশন ফিল্টার ব্যবহার করছে, নয় জিকুয়েরি ফিল্টার পদ্ধতি।
কালিমা

আমি এটা ভালোবাসি! এটি jquery না হলেও এটি সেরা সমাধান বলে মনে হচ্ছে ...
স্যাম

36

আপনি আন্ডারস্কোর.জেএস ব্যবহার করতে পারেন । এটি সত্যই বিষয়গুলিকে সহজ করে তোলে।

আপনার ক্ষেত্রে আপনার যে সমস্ত কোডটি লিখতে হবে তা হ'ল -

_.without([1,2,3], 2);

এবং ফলাফলটি হবে [1,3]

এটি আপনার লেখা কোডটি হ্রাস করে।


34

কোনও jQuery উপায় নয় তবে ... কেন সহজ উপায় ব্যবহার করবেন না। নিম্নলিখিত অ্যারে থেকে 'সি' সরান

var a = ['a','b','c','d']
a.splice(a.indexOf('c'),1);
>["c"]
a
["a", "b", "d"]

আপনি এটিও ব্যবহার করতে পারেন: (আমার কাছে দ্রষ্টব্য: আপনার নিজের অবজেক্টগুলি সংশোধন করবেন না )

Array.prototype.remove = function(v) { this.splice(this.indexOf(v) == -1 ? this.length : this.indexOf(v), 1); }
var a = ['a','b','c'];
a.remove('c'); //value of "a" is now ['a','b']

যোগ করা সহজa.push('c')


9
কাজ করে না। পাওয়া না গেলে অ্যারেতে শেষ আইটেমটি সরিয়ে দেয়।
টিমোথি অ্যারোন

7
indexOf IE8- এ সমর্থিত নয়।
বুদে

1
ধন্যবাদ নিখুঁতভাবে কাজ।
জে মোমায়া

22

অ্যারে আইটেম সরান

var arr = ["jQuery", "JavaScript", "HTML", "Ajax", "Css"];
var itemtoRemove = "HTML";
arr.splice($.inArray(itemtoRemove, arr), 1);

14
//This prototype function allows you to remove even array from array
Array.prototype.remove = function(x) { 
    var i;
    for(i in this){
        if(this[i].toString() == x.toString()){
            this.splice(i,1)
        }
    }
}

ব্যবহারের উদাহরণ

var arr = [1,2,[1,1], 'abc'];
arr.remove([1,1]);
console.log(arr) //[1, 2, 'abc']

var arr = [1,2,[1,1], 'abc'];
arr.remove(1);
console.log(arr) //[2, [1,1], 'abc']

var arr = [1,2,[1,1], 'abc'];
arr.remove('abc');
console.log(arr) //[1, 2, [1,1]]

এই প্রোটোটাইপ ফাংশনটি ব্যবহার করতে আপনাকে এটি আপনার কোডে আটকানো দরকার। তারপরে আপনি এটিকে 'ডট নোটেশন' দিয়ে যে কোনও অ্যারেতে প্রয়োগ করতে পারেন:

someArr.remove('elem1')

আরও কিছুটা ব্যাখ্যা এখানে মিস করবেন না!
গাজ শীত

এই প্রোটোটাইপ ফাংশনটি ব্যবহার করতে আপনাকে এটি আপনার কোডে আটকানো দরকার। তারপরে আপনি এটিকে 'ডট নোটেশন' দিয়ে যে কোনও অ্যারেতে প্রয়োগ করতে পারেন, উদাহরণস্বরূপ: someArr.remove ('elem1')
Yesnik

3
এরকম কিছু নিয়েই একমাত্র সমস্যা হ'ল এটি বিশ্বব্যাপী অ্যারে অবজেক্টের অপসারণের পদ্ধতিটি ওভাররাইট করে, অর্থ প্রকল্পের অন্য কোনও কোড যা ডিফল্ট আচরণের উপর নির্ভর করে বগী আচরণ সহ শেষ হয়।
jmort253

2
আর একটি সমস্যা হ'ল গ্লোবাল ভেরিয়েবল iওভাররাইট হয়ে যায়।
রোল্যান্ড ইলিগ

5

জাভাস্ক্রিপ্টে এটি করার কোনও নেটিভ উপায় নেই। পরিবর্তে এটি করার জন্য আপনি একটি গ্রন্থাগার ব্যবহার করতে বা একটি ছোট ফাংশন লিখতে পারেন: http://ejohn.org/blog/javascript-array-remove/


5

আপনি। এই মত কাজ করতে পারবেন না:

var arr = [ 1 , 2 , 3 , 5 , 8];
var searchValue = 2;

var newArr = $(arr).not([searchValue]).get();

2
মানটি সেখানে না থাকলে এটি পুরো অ্যারেটি মুছে ফেলবে, সুতরাং একটি অনুসন্ধানভ্যালু = 4 একটি ফাঁকা অ্যারে ফিরিয়ে দেবে।
জুলিয়ান কে

3
আমি কোডটি জিএসফিডিতে অনুলিপি করেছি, searchValue4 এ পরিবর্তিত হয়ে কোড চালিয়েছি , কোনও সমস্যা সনাক্ত হয়নি। সমস্ত মান এখনও উপস্থিত ছিল। @ জুলিয়ানকে
আরএসটি

4

ব্যবহারকারী 111116 এর উত্তর আমার সংস্করণ। কোনও মিল না পাওয়া গেলে তার মান সরিয়ে দেয়, যা ভাল নয়।

var y = [1, 2, 3]
var removeItem = 2;

var i = $.inArray(removeItem,y)

if (i >= 0){
    y.splice(i, 1);
}

alert(y);

এটি এখন 1 টি আইটেম সরায় যদি কোনও মিল খুঁজে পাওয়া যায়, 0 কোনও মিল খুঁজে পাওয়া যায় না।

কিভাবে এটা কাজ করে:

  • in .আরআরাই (মান, অ্যারে) একটি jQuery ফাংশন যা এটির প্রথম সূচকটি খুঁজে পায় finds value একটি ইনarray
  • উপরের মানটি পাওয়া যায় না -1 মানটি পাওয়া যায় না, সুতরাং অপসারণের আগে আমি বৈধ সূচক কিনা তা পরীক্ষা করে দেখুন। সূচি -১ সরিয়ে দেওয়ার অর্থ সর্বশেষটি সরিয়ে ফেলা, যা এখানে সহায়ক নয়।
  • .splice (INDEX, সংখ্যা) সরিয়ে ফেলা countমান রয়েছে তা গণনা থেকে শুরু index, তাই আমরা শুধু একটি চান countএর1

3
//in case somebody needs something like this:  multidimensional array (two items)

var ar = [[0,'a'],[1,'b'],[2,'c'],[3,'d'],[4,'e'],[5,'f']];

var removeItem = 3;  


ar = jQuery.grep(ar, function(n) {
  return n[0] != removeItem;   //or n[1] for second item in two item array
});
ar;

3

স্প্লাইস সহ একটি সহজ সমাধান রয়েছে। ডাব্লু 3 স্কুল অনুসারে স্প্লাইস সিনট্যাক্স অনুসরণ করছে;

array.splice(index, howmany, item1, ....., itemX)

সূচক প্রয়োজনীয়। একটি পূর্ণসংখ্যা যা আইটেমগুলি যুক্ত / সরাতে কোন অবস্থানে নির্দিষ্ট করে, অ্যারের শেষ থেকে অবস্থান নির্দিষ্ট করতে নেতিবাচক মানগুলি ব্যবহার করে

কতগুলো প্রয়োজনীয় সরানো আইটেমের সংখ্যা। যদি 0 তে সেট করা থাকে তবে কোনও আইটেম সরানো হবে না

আইটেম 1, ..., আইটেমএক্স ptionচ্ছিক । অ্যারেতে যুক্ত হওয়া নতুন আইটেম (গুলি)

মনে রাখবেন, নীচের জেএসগুলি যদি পাওয়া যায় তবে প্রদত্ত অ্যারে থেকে এক বা একাধিক মিলিত আইটেমটি পপ করবে, অন্যথায় অ্যারের শেষ আইটেমটি সরিয়ে ফেলবে না।

var x = [1,2,3,4,5,4,4,6,7];
var item = 4;
var startItemIndex = $.inArray(item, x);
var itemsFound = x.filter(function(elem){
                            return elem == item;
                          }).length;

অথবা

var itemsFound = $.grep(x, function (elem) {
                              return elem == item;
                           }).length;

ফাইনালটি নীচের মত দেখতে হবে

x.splice( startItemIndex , itemsFound );

আশাকরি এটা সাহায্য করবে.


3

অ্যারেতে উপাদান উপস্থিত রয়েছে কিনা তা আগে পরীক্ষা করে দেখুন

$.inArray(id, releaseArray) > -1

উপরের লাইনটি অ্যারের উপস্থিত থাকলে সেই উপাদানটির সূচকটি দেয়, অন্যথায় এটি -1 প্রদান করে

 releaseArray.splice($.inArray(id, releaseArray), 1);

এখন পাওয়া গেলে উপরে লাইনটি অ্যারের থেকে এই উপাদানটি সরিয়ে ফেলবে। অ্যারে থেকে উপাদানটি চেক করতে এবং সরানোর জন্য নীচের যুক্তি সংক্ষিপ্ত করার জন্য প্রয়োজনীয় কোড।

  if ($.inArray(id, releaseArray) > -1) {
                releaseArray.splice($.inArray(id, releaseArray), 1);
            }
            else {
                releaseArray.push(id);
            }

2

আমার একটি অনুরূপ টাস্ক ছিল যেখানে অ্যারেতে থাকা সামগ্রীর সংখ্যার উপর ভিত্তি করে আমার একবারে একাধিক অবজেক্ট মুছতে হবে।

সুতরাং কয়েকটি পুনরাবৃত্তির পরে আমি এখানে দিয়ে শেষ করব:

list = $.grep(list, function (o) { return !o.IsDeleted });

2

আমি অ্যারে ক্লাসটি একটি pick_and_remove()ফাংশন দিয়ে প্রসারিত করতাম , যেমন:

var ArrayInstanceExtensions = {
    pick_and_remove: function(index){
        var picked_element = this[index];
        this.splice(index,1);
        return picked_element;
    } 
};
$.extend(Array.prototype, ArrayInstanceExtensions);

এটি কিছুটা ভার্বোজ মনে হলেও আপনি এখন যে pick_and_remove()কোনও অ্যারে সম্ভবত কল করতে পারেন!

ব্যবহার:

array = [4,5,6]           //=> [4,5,6]
array.pick_and_remove(1); //=> 5
array;                    //=> [4,6]

আপনি এখানে পোকেমন-থিমযুক্ত ক্রিয়ায় সমস্ত দেখতে পারেন


2
/** SUBTRACT ARRAYS **/

function subtractarrays(array1, array2){
    var difference = [];
    for( var i = 0; i < array1.length; i++ ) {
        if( $.inArray( array1[i], array2 ) == -1 ) {
                difference.push(array1[i]);
        }
    }
return difference;
}  

তারপরে আপনি আপনার কোডের যে কোনও জায়গায় ফাংশনটি কল করতে পারেন।

var I_like    = ["love", "sex", "food"];
var she_likes = ["love", "food"];

alert( "what I like and she does't like is: " + subtractarrays( I_like, she_likes ) ); //returns "Naughty :P"!

এটি সমস্ত ক্ষেত্রে কাজ করে এবং উপরের পদ্ধতিগুলিতে সমস্যাগুলি এড়ায়। আশা করি এইটি কাজ করবে!


2

এটি চেষ্টা করুন এটি আমার জন্য কাজ করে

_clientsSelected = ["10", "30", "12"];
function (removeItem) {
console.log(removeItem);
   _clientsSelected.splice($.inArray(removeItem, _clientsSelected), 1);
   console.log(_clientsSelected);
`enter code here`},

2

এখানে দ্বিতীয় দ্বিতীয়টি উত্তোলিত উত্তরটি ওপি চায় এমন আচরণের এক-লাইনার jQuery পদ্ধতির নিকটতম ট্র্যাকের দিকে, তবে তারা তাদের কোডের শেষে হোঁচট খেয়েছিল এবং এতে একটি ত্রুটি রয়েছে। যদি আপনার আইটেমটি সরিয়ে ফেলা হয় তবে অ্যারেটিতে না থাকলে শেষ আইটেমটি সরানো হবে।

কয়েকজন এই সমস্যাটি লক্ষ্য করেছেন এবং কেউ কেউ এ থেকে রক্ষা পাওয়ার জন্য উপায়গুলি সরবরাহ করেছেন। আমি যে সংক্ষিপ্ততম এবং সবচেয়ে পরিষ্কার পদ্ধতিটি পেয়েছি তা অফার করছি এবং এই পদ্ধতি অনুসারে তাদের কোড ঠিক করার উপায়ের জন্য আমি তাদের উত্তরে মন্তব্য করেছি।

var x = [1, 2, "bye", 3, 4];
var y = [1, 2, 3, 4];
var removeItem = "bye";

// Removing an item that exists in array
x.splice( $.inArray(removeItem,x), $.inArray(removeItem,x) ); // This is the one-liner used

// Removing an item that DOESN'T exist in array
y.splice( $.inArray(removeItem,y), $.inArray(removeItem,y) ); // Same usage, different array

// OUTPUT -- both cases are expected to be [1,2,3,4]
alert(x + '\n' + y);

অ্যারে এক্স সহজেই "বাই" উপাদানটি সরিয়ে ফেলবে, এবং অ্যারে y আউটআউট হবে।

$.inArray(removeItem,array)দ্বিতীয় আর্গুমেন্ট হিসাবে আর্গুমেন্টের ব্যবহার আসলে স্প্লাইসের দৈর্ঘ্য হিসাবে শেষ হয়। যেহেতু আইটেমটি পাওয়া যায় নি, এটি এর মূল্যায়ন করে array.splice(-1,-1);, যার ফলস্বরূপ কিছুই বিভক্ত হবে না ... সব কিছুই এর জন্য একটি লুপ না লিখে without


1

ভ্যানিলা জাভাস্ক্রিপ্ট ব্যবহার করে অ্যারে থেকে 2 টি নিরাপদে অপসারণ করতে:

// Define polyfill for browsers that don't natively support Array.indexOf()
if (!Array.prototype.indexOf) {
  Array.prototype.indexOf = function(searchElement, fromIndex) {
    var k;
    if (this===null) {
      throw new TypeError('"this" is null or not defined');
    }
    var O = Object(this),
      len = O.length >>> 0;
    if (len===0) return -1;
    var n = +fromIndex || 0;
    if (Math.abs(n)===Infinity) n = 0;
    if (n >= len) return -1;
    k = Math.max(n >= 0 ? n : len - Math.abs(n), 0);
    while (k < len) {
      if (k in O && O[k]===searchElement) return k;
      ++k;
    }
    return -1;
  };
}

// Remove first instance of 2 from array
if (y.indexOf(2) > -1) {
  y.splice(y.indexOf(2), 1);
}

/* To remove all instances of 2 from array, change 'if' to 'while':
while (y.indexOf(2) > -1) {
  y.splice(y.indexOf(2), 1);
}
*/

console.log(y);  // Returns [1, 3]

পলিফিল উত্স: মজিলা


0

সরফরাজের উত্তরটি জুড়ে দেওয়ার জন্য, অবাক করা কেউই এটিকে এখনও কোনও কার্যক্রমে তৈরি করেননি।

আপনার অ্যারেতে যদি একাধিকবার একই মান থাকে তবে। ফিল্টার পদ্ধতিটি ব্যবহার করে ddagsan থেকে উত্তরটি ব্যবহার করুন।

function arrayRemoveVal(array, removeValue){
	var newArray = jQuery.grep(array, function(value) {return value != removeValue;});
	return newArray;
}
var promoItems = [1,2,3,4];	
promoItems = arrayRemoveVal(promoItems, 3);// removes 3
console.log(promoItems);
promoItems = arrayRemoveVal(promoItems, 3);// removes nothing
console.log(promoItems);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.2.3/jquery.min.js"></script>

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.