JQuery का उपयोग करके सरणी से विशिष्ट मान कैसे निकालें


419

मेरे पास एक सरणी है जो इस तरह दिखता है: var y = [1, 2, 3];

मैं 2सरणी से निकालना चाहूंगा y

मैं jQuery का उपयोग करके किसी सरणी से एक विशेष मूल्य कैसे निकाल सकता हूं? मैंने कोशिश की है pop()लेकिन वह हमेशा अंतिम तत्व को हटा देता है।


8
चेतावनी : कुछ सबसे अपवित्र जवाबों के दुष्प्रभाव हो सकते हैं, उदाहरण के लिए, गलत संचालन करते समय, जब सरणी को हटाने के लिए तत्व नहीं होता है। कृपया सावधानी से उनका उपयोग करें
रिकार्डो

इस उत्तर ने मेरे लिए, सादे जावास्क्रिप्ट के साथ काम किया: stackoverflow.com/a/5767357/4681687
chimos

ब्याह () और $ .inArray () के उपयोग के तहत मेरी टिप्पणी देखें, मैंने एक लूप के उपयोग के बिना इस मुद्दे को हल किया है, और यह साफ है।
user253780

जवाबों:


619

एक काम JSFIDDLE

आप ऐसा कुछ कर सकते हैं:

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
मुझे लगता है कि @ user113716 उत्तर, डिफ़ॉल्ट JS विधि के बारे में सही तरीका है। किसी भी देशी पद्धति को हमेशा पसंद किया जाएगा और तेजी से।
नवविवाहित

114
क्या यह जवाब पूरी तरह से गलत नहीं है? यह एक लापता आइटम के साथ एक नई सरणी बना रहा है, किसी आइटम को सरणी से नहीं निकाल रहा है। वे सब एक ही बात नहीं कर रहे हैं।
जेम्स मूर

5
यह हे (n) की जटिलता के साथ एक निष्कासन है ... सरणी में जितने अधिक मूल्य, उतना ही बुरा होगा ...
Lyth

2
O (n) की जटिलता कोई मुद्दा नहीं है।
उमर तारिक

370

JQuery के साथ, आप इस तरह एक एकल-लाइन ऑपरेशन कर सकते हैं:

उदाहरण: http://jsfiddle.net/HWKQY/

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

देशी .splice()और jQuery का उपयोग करता है $.inArray()


13
@ इलकेरन - आपका स्वागत है। : ओ) मुझे ध्यान देना चाहिए कि यह केवल पहले उदाहरण को हटा देगा। यदि कई को हटाया जाना है, तो यह काम नहीं करेगा।
user113716

7
मैंने निष्कासन को भी एक मान में बदल दिया है जो कि सरणी में मौजूद नहीं है और इसने सरणी में अंतिम आइटम को हटा दिया है। यदि आप हटाए गए इटाम के अस्तित्व के बारे में निश्चित नहीं हैं तो इसका उपयोग करें: y = $ .grep (y, function (val {{return val! = RemoveItem;}));
सोलबर्न

52
चेतावनी - गलत आइटम को हटा सकते हैं! $ .inArray -1 तब मिलता है जब मान मौजूद नहीं होता है और .plice एक नकारात्मक सूचकांक को 'अंत से' के रूप में मानता है, इसलिए यदि आप जिस मूल्य को निकालने की कोशिश कर रहे हैं वह मौजूद नहीं है, इसके बजाय कुछ अन्य मान हटा दिए जाएंगे। इसके अलावा $ .grep सभी घटनाओं को हटा देगा जबकि यह विधि केवल पहले को हटा देगी।
रयान विलियम्स

1
ऊपर वर्णित दोनों मुद्दों को whilevar 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
प्रस्तावित समाधानों में से सबसे अच्छा काम करने लगता है, भले ही यह वास्तव में मौजूदा सरणी को बदल नहीं रहा है, बल्कि एक नया निर्माण कर रहा है। यह गैर-मौजूदा मान या खाली सरणी के साथ भी काम करता है। JSFiddle मैंने त्वरित प्रदर्शन की जाँच की: 800.000 मूल्यों के साथ एक सरणी के साथ इसे पूरा करने में लगभग 6 सेकंड लगे। यकीन नहीं है कि अगर यह तेजी से है।
फ़्लो

2
यह समाधान वेनिला जेएस उच्च क्रम फ़ंक्शन फ़िल्टर का उपयोग कर रहा है, न कि jQuery फ़िल्टर विधि।
कालीमह

मुझे यह पसंद है! यह सबसे अच्छा समाधान है, भले ही यह jquery नहीं है ...
सैम

36

आप underscore.js का उपयोग कर सकते हैं । यह वास्तव में चीजों को सरल बनाता है।

आपके मामले में आपको जो भी कोड लिखना होगा, वह है -

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

और परिणाम [1,3] होगा।

यह आपके द्वारा लिखे गए कोड को कम कर देता है।


34

एक jQuery तरीका नहीं है, लेकिन ... सरल तरीके का उपयोग क्यों न करें। निम्न सरणी से 'c' निकालें

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
IE8- में indexOf समर्थित नहीं है।
ब्यूडे सेप

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
मैंने कोड को jsfiddle में कॉपी किया है, searchValue4 में बदला है, कोड चलाया है, कोई समस्या नहीं मिली। सभी मान अभी भी मौजूद थे। @ JulianK
RST

4

User113716 के उत्तर का मेरा संस्करण। अगर कोई मैच नहीं मिलता है, तो उसका मूल्य निकाल दिया जाता है, जो अच्छा नहीं है।

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

var i = $.inArray(removeItem,y)

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

alert(y);

यह अब 1 आइटम निकालता है यदि एक मैच पाया जाता है, 0 अगर कोई मैच नहीं मिलता है।

यह काम किस प्रकार करता है:

  • $ .inArray (मान, सरणी) एक jQuery फ़ंक्शन है जो a valueमें पहला इंडेक्स खोजता हैarray
  • उपरोक्त रिटर्न -1 यदि मान नहीं मिला है, तो जाँच करें कि हटाने से पहले हम एक वैध सूचकांक है। इंडेक्स -1 को हटाने का मतलब है आखिरी को हटाना, जो यहां मददगार नहीं है।
  • .splice (इंडेक्स, काउंट) 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

ब्याह के साथ एक सरल उपाय है। W3School ब्याह के अनुसार वाक्य रचना निम्नलिखित है;

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

सूची आवश्यक है। एक पूर्णांक जो वस्तुओं को जोड़ने / हटाने के लिए किस स्थिति में निर्दिष्ट करता है, सरणी के अंत से स्थिति को निर्दिष्ट करने के लिए नकारात्मक मानों का उपयोग करें

कितने आवश्यक है। निकाले जाने वाली वस्तुओं की संख्या। यदि 0 पर सेट किया गया है, तो कोई आइटम नहीं हटाया जाएगा

आइटम 1, ..., आइटमएक्स वैकल्पिक। नए आइटम को सरणी में जोड़ा जाना है

ध्यान रखें, निम्न js दिए गए सरणी से एक या अधिक मिलान किए गए आइटम को पॉप करेंगे यदि मिला, अन्यथा सरणी के अंतिम आइटम को नहीं हटाएंगे।

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);

सरणी x आसानी से तत्व "अलविदा" को हटा देगा, और सरणी y अछूता हो जाएगा।

$.inArray(removeItem,array)दूसरे तर्क के रूप में तर्क का उपयोग वास्तव में बंटवारे की लंबाई होने के कारण समाप्त होता है। चूंकि आइटम नहीं मिला था, इसलिए यह मूल्यांकन करता है array.splice(-1,-1);, जिसके परिणामस्वरूप कुछ भी नहीं हो सकता है ... इसके लिए एक लूप लिखने के बिना सभी।


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

सरफराज के जवाब से जोड़ने के लिए, किसी ने भी इसे अभी तक एक समारोह में नहीं बनाया है।

यदि आप अपने सरणी में एक से अधिक बार समान मान रखते हैं, तो .filter विधि का उपयोग करके 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>

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.