2011-08-05 17 views
22
var people = ['alex','jason','matt']; 

people.forEach(function(p){ 
    if(p.length > 4){ 
     //REMOVE THIS PERSON or pop it out of the list or whatever 
    } 
}); 

console.log(people) //should return ['alex','matt'] 

मैं प्रत्येक लूप के लिए इसका उपयोग करके सूची से बाहर एक तत्व को हटाना चाहता हूं।प्रत्येक के लिए उपयोग करके, मैं किसी सूची में तत्व को कैसे हटा सकता हूं?

+1

मैं नहीं मानता कि आप इस पर पाश के रूप में एक सूची को संशोधित करने वाले रहे हैं। –

+2

आपने क्या प्रयास किया है? एसओ (अनिवार्य रूप से) समस्याओं के लिए है; यह कक्षा नहीं है। –

+2

मैं दूसरा राफे और टॉमलाक की टिप्पणियां। राफे ने जो कहा, उस पर विस्तार करने के लिए: प्रत्येक लूप के लिए तत्वों को निकालने के लिए सामान्य अभ्यास नहीं है (हालांकि मुझे यकीन नहीं है कि जावास्क्रिप्ट इसे कैसे संभालता है, शायद यह काम करेगा)। लूप के लिए मानक इंडेक्स-आधारित का उपयोग करके आप (लगभग निश्चित रूप से) बेहतर हैं; मैं अंतिम तत्व से पीछे की ओर लूपिंग का सुझाव देता हूं ताकि आप इंडेक्स वैरिएबल को समायोजित किए बिना तत्वों को हटा सकें। ऐरे के तरीकों के विवरण के लिए [MDN Array doco] (https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array) पर एक नज़र डालें। – nnnnnn

उत्तर

22

आप उस सरणी को संशोधित नहीं करना चाहिए जिस पर आप लूपिंग कर रहे हैं। आप एक नया उत्पादन कर सकते हैं, हालांकि:

var newPeople = []; 
people.forEach(function(p){ 
    if(p.length <= 4){ 
     newPeople.push(p); 
    } 
}); 
+0

+1 या इंडेक्स को हटाने के लिए सहेजें और बाद में उन्हें हटा दें। –

+0

+1, लेकिन तुलना '<=' होना चाहिए। –

+0

@ हंस एंजेल: हो गया! – Mrchief

48

सही नौकरी के लिए सही टूल का उपयोग करें। इस मामले में:

for (var i = 0; i < data.length; i++) { 
    if (data[i].value === 5) { 
     data.splice(i--, 1); 
    } 
} 

या के रूप में @nnnnnn का सुझाव दिया है, पीछे की ओर पाश:

for (var i = data.length-1; i >= 0; i--) { 
    if (data[i].value === 5) { 
     data.splice(i, 1); 
    } 
} 

हालांकि, अगर आप Array.prototype.filter() उपयोग करने पर विचार करना चाहिए:

data.filter(function (e) { 
    return e.value !== 5; 
}); 

या इस तरह के रूप में एक उपयोगिता समारोह पुस्तकालय lodash या underscore, जो किसी सरणी से तत्वों को निकालने के लिए एक फ़ंक्शन प्रदान करता है:

_.remove(data, function (e) { 
    return e.value === 5; 
}); 

बाद वाले दो का लाभ यह है कि आपका कोड अधिक पठनीय हो जाता है।

+3

यह एक साफ समाधान है जो बदलते अपमान के मुद्दों पर विचार करता है! –

+3

'.filter' वास्तव में अच्छा लग रहा है –

1

foreach, ES5 एक सूचकांक के साथ एक साथ इस्तेमाल किया जा सकता के बाद से:

data.forEach(function (element, index) { 
    if (element % 2 == 0) { 
    data.splice(index, 1); 
    } 
}); 
+1

ध्यान दें कि यह कोड स्निपेट * वास्तव में काम नहीं करता है * - यदि डेटा' 1,28,35,444,555,666,333,424,313,303,484,464,121,12,14,88,96,108,1224,777] है तो यह होगा इसे '[1, 35, 555, 333, 313, 303, 464, 121, 14, 96, 1224, 777] पर बदलें –

संबंधित मुद्दे

 संबंधित मुद्दे