2011-02-01 31 views
32

मैं कैसे किसी आइटम को निकालने करते [i] मदों से एक बार यह तक पहुँच जाता है में:निकालें आइटम [i] jQuery से प्रत्येक पाश

$.each(items, function(i) { 
    // how to remove this from items 
}); 
+4

आपका लक्ष्य क्या है? यदि आप 'आइटम' से प्रत्येक आइटम को हटाना चाहते हैं, तो बस 'आइटम' को खाली सरणी पर सेट करें। –

+3

'आइटम' क्या है? – SLaks

+0

मुझे अब यह करने की ज़रूरत नहीं है ... क्योंकि मुझे वास्तविक समस्या को महसूस किए बिना अपना जावास्क्रिप्ट फ़ंक्शन फिर से चलाया गया था क्यों यह गैर-आईई ब्राउज़र में समय समाप्त हो रहा था: http://code.google.com/ पी/क्रोमियम/मुद्दों/विवरण? आईडी = 71305 – bcm

उत्तर

9

आप सरणी से एक तत्व को निकालना चाहते हैं, का उपयोग splice()

var myArray =['a','b','c','d']; 
var indexToRemove = 1; 
// first argument below is the index to remove at, 
//second argument is num of elements to remove 
myArray.splice(indexToRemove , 1); 

myArray अब ['a','c','d']

+17

सवाल यह था कि इसे लूप से कैसे हटाया जाए। –

+1

@CiprianTarta प्रश्न स्पष्ट रूप से बीमार स्वरूपित था क्योंकि इसने इसे op के लिए उत्तर दिया ... लेकिन मैं सहमत हूं। Splice का उपयोग वास्तव में काम नहीं करता है जब यह किसी भी '$ .each' लूप के अंदर होता है क्योंकि यह लूप को गड़बड़ कर देगा। – cregox

3

कुछ

तरह
var indexToBeRemoved = 3; // just an illustration 
$.each(items, function(i) { 
    if(i==indexToBeRemoved){ 
     $(this).remove(); 
    } 
}); 
+2

यदि ओपी क्या करना चाहता है तो डीओएम से एक तत्व हटा दें, तो यह सही है। अगर वह सूची से किसी आइटम को हटाना चाहता है, तो यह ऐसा नहीं करेगा। – Pointy

+0

हां, मुझे लगता है कि यह एक डोम तत्व है, अन्यथा jquery का उपयोग करने का क्या मतलब है .... – Aliostad

+2

'JQuery' का उपयोग करने का बिंदु' json' ऑब्जेक्ट को पुन: सक्रिय कर सकता है। – Dementic

107

यह बेहतर नहीं होगा इस मामले में $.each का उपयोग करें। इसके बजाय $.grep का उपयोग करें। यह एक अपवाद के साथ $.each के रूप में एक सरणी के माध्यम से बहुत लूप के माध्यम से loops। यदि आप कॉलबैक से true लौटाते हैं, तो तत्व बनाए रखा जाता है। अन्यथा, इसे सरणी से हटा दिया जाता है। एक $.grep कॉलबैक के संदर्भ में thiswindow के लिए सेट है, सरणी तत्व के लिए नहीं:

आपका कोड कुछ इस तरह दिखना चाहिए:

items = $.grep(items, function (el, i) { 
    if (i === 5) { // or whatever 
     return false; 
    } 

    // do your normal code on el 

    return true; // keep the element in the array 
}); 

एक और टिप्पणी।

+0

बहुत यकीन है कि '$ .grep()' केवल Arrays के लिए है। यदि 'आइटम' एक ऐरे है, तो यह तब तक अच्छा होगा जब तक कि ऐरे के अन्य संदर्भ नहीं हैं जो अद्यतन संस्करण की अपेक्षा कर रहे हैं। : ओ) – user113716

+1

@ पैट्रिक स्पष्टीकरण के लिए धन्यवाद। – lonesomeday

+2

बस दूसरों के लिए ध्यान दें। एल तत्व है मैं सिर्फ सूचकांक है। – ysrb

10

शामिल होंगे मैं तुम्हें $.map चाहते अनुमान लगा रहा हूँ। आप return null किसी आइटम को निकालने के लिए कर सकते हैं और नहीं कैसे सूचकांक शिफ़्ट हो सकता के बारे में चिंता:

items = $.map(items, function (item, index) { 
    if (index < 10) return null; // Removes the first 10 elements; 
    return item; 
}); 
3

समाधान के नीचे है:

_.each(data, function (item, queue) { 
    if (somecondition) { 
     delete data[queue] 
    } 
}); 
1

ऊपर @lonesomday ने उल्लेख किया (मैं बस यह नहीं जोड़ सके एक टिप्पणी में) grep सरणी के लिए है, लेकिन आप grep अंदर अपने चयनकर्ता डाल सकता है:

var items = $.grep($(".myselector", function (el, i) { 
    return (i===5) ? false : true; 
}; 

यहका उपयोग कर पाया सभी तत्वों को संग्रहीत करेंगेमें 6 वें स्थान पर आइटम छोड़कर (सूची 0 अनुक्रमित है, जो 6 वें तत्व को "5" बनाती है)

0

हालांकि मैं आमतौर पर सरणी फ़िल्टर करने के लिए $.grep() का उपयोग करना पसंद करूंगा, मेरे पास एक उदाहरण है जहां मैं पहले से ही डेटासेट को संसाधित करने के लिए सरणी पर $.each() का उपयोग कर रहा हूं। कुछ प्रसंस्करण करने के बाद, मैं निर्धारित कर सकते हैं या नहीं, आइटम सरणी से हटा दिया जाना चाहिए:

// WARNING - DON'T DO THIS: 
$.each(someArray, function(index, item) { 
    // Some logic here, using 'item' 

    if (removeItem) { 
     // Spice this item from the array 
     someArray.splice(index, 1) 
    } 

    // More logic here 
}); 

चेतावनी: यह एक नई समस्या प्रस्तुत करता है! एक बार आइटम को सरणी से विभाजित कर दिया गया है, तो jQuery मूल सरणी की लंबाई के लिए अभी भी लूप होगा। उदा .:

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

$.each(foo, function(i, item) { 
    console.log(i + ' -- ' + item); 
    if (i == 3){ 
     foo.splice(i, 1); 
    } 
}); 

विल उत्पादन:

0 -- 1 
1 -- 2 
2 -- 3 
3 -- 4 
4 -- undefined 

और foo अब [1, 2, 3, 5] है। सरणी में प्रत्येक आइटम jQuery लूप के सापेक्ष "स्थानांतरित" होता है, और हमने तत्व "5" को पूरी तरह याद किया है, और लूप में अंतिम आइटम undefined है।सर्वोत्तम इसे हल करने का तरीका एक रिवर्स for लूप (arr.length - 1 से 0 पर जा रहा है) का उपयोग करना है। यह सुनिश्चित करेगा कि तत्व को हटाने से लूप में अगले आइटम को प्रभावित नहीं होगा।

1) $.grep()

var someArray = $.grep(someArray, function(item) { 
    // Some logic here, using 'item' 

    return removeItem == false; 
}); 

$.each(someArray, function(index, item) { 
    // More logic here 
}); 

2 पाशन से पहले सरणी) दूसरे में आइटम पुश: लेकिन जब से प्रश्न यहाँ $ .प्रत्येक के संबंध में है, इसलिए इस के हल के लिए कुछ वैकल्पिक तरीके हैं सरणी

var choiceArray = [ ]; 

$.each(someArray, function(index, item) { 
    // Some logic here, using 'item' 

    if (removeItem) { 
     // break out of this iteration and continue 
     return true; 
    } 

    // More logic here 

    // Push good items into the new array 
    choiceArray.push(item); 
}); 
संबंधित मुद्दे