मैं जावास्क्रिप्ट में एक सरणी में एक तत्व को कैसे परेशान करूं?


जवाबों:


243

डिलीट का उपयोग न करें क्योंकि यह किसी एलीमेंट से एलीमेंट को नहीं हटाएगा जो इसे केवल अपरिभाषित के रूप में सेट करेगा, जो तब एरे की लंबाई में सही ढंग से परिलक्षित नहीं होगा।

आप कुंजी जानते हैं कि आप का उपयोग करना चाहिए जोड़ यानी

myArray.splice(key, 1);

स्टीवन की स्थिति में किसी के लिए आप कुछ इस तरह की कोशिश कर सकते हैं:

for (var key in myArray) {
    if (key == 'bar') {
        myArray.splice(key, 1);
    }
}

या

for (var key in myArray) {
    if (myArray[key] == 'bar') {
        myArray.splice(key, 1);
    }
}

3
+1 अच्छा बिंदु, मुझे यह भी पसंद है: ejohn.org/blog/javascript-array-remove
CMS

3
@ThiefMaster - समझाने की देखभाल? मुझे नहीं पता कि इसका क्या मतलब है और सीखने के लिए उत्सुक है। हमेशा की तरह, एक संपादन एक ऑफ-हैंड टिप्पणी से 1,000,000 गुना बेहतर है; आपको पता होना चाहिए कि आपके पास कितनी राशि है।
जा रहा

21
के for (var key in myArray)बजाय का उपयोग करें for (key in myArray)- अन्यथा keyएक वैश्विक चर है और यदि आप उस लूप के अंदर एक फ़ंक्शन कहते हैं जिसमें समान समस्या है, तो आपको अप्रत्याशित परिणाम प्राप्त होंगे।
ThiefMaster

2
ध्यान दें, दूसरा उदाहरण काम नहीं करता है यदि सरणी में एक पंक्ति में कई आइटम हैं जो 'बार' से मेल खाते हैं। एरे का इंडेक्स शिफ्ट हो जाएगा और आपको आधी वस्तुओं की स्प्लिसिंग याद आएगी। इसके बजाय, एक लूप के लिए उपयोग करें जो एक मिलान पाए जाने पर सूचकांक को घटाता है।
डेव लैंसिया

वस्तुओं की एक सरणी के लिए: stackoverflow.com/questions/15287865/…
फेडिर RYKHTIK

52
delete foo[key];

: डी


4
तकनीकी रूप से इस सवाल का जवाब नहीं है। वह कुंजी 'बार' निकालना चाहता है। और आपके मुख्य चर का मतलब यह नहीं है। : पी
कोन

4
कुंजी = 'बार'; eval ("हटाएं फू।" + कुंजी); छुपाता है ; डी
olliej

3
करो नहीं का उपयोग eval। ऑब्जेक्ट / एरे की एक कुंजी / इंडेक्स को हटाने का उपयोग न करने वाले बहुत सरल तरीकों से प्राप्त किया जा सकता है eval
दीनी

4
वास्तव में यदि आप हटाए गए foo [कुंजी] द्वारा अनुक्रमित सरणी से निकालते हैं, तो यह foo [key] = अपरिभाषित में मूल्य संग्रहीत करेगा और foo.length वही रहेगी जो गलत है। इसलिए इसके बजाय SPLICE का उपयोग करें
Павел Иванов

हटाएं फू का उपयोग करें [कुंजी] यह गलत है; foo.splice (कुंजी, 1) का उपयोग करना चाहिए;
विंजयेन

38

एक महत्वपूर्ण नोट: जावास्क्रिप्ट एरर्स उन सहयोगी सरणियों की तरह नहीं हैं जिन्हें आप PHP से इस्तेमाल किया जा सकता है। यदि आपकी "सरणी कुंजी" एक स्ट्रिंग है, तो आप अब किसी सरणी की सामग्री पर काम नहीं कर रहे हैं। आपकी सरणी एक ऑब्जेक्ट है, और आप <प्रमुख नाम> नाम के सदस्य तक पहुंचने के लिए ब्रैकेट नोटेशन का उपयोग कर रहे हैं। इस प्रकार:

var myArray = [];
myArray ["बार"] = सच;
myArray ["foo"] = true;
चेतावनी (myArray.length); // रिटर्न 0।

क्योंकि आपने ऐरे में तत्व नहीं जोड़े हैं, इसलिए आपने केवल मायरे के बार और फू सदस्यों को संशोधित किया है।


37

यदि आपको पता है कि मुख्य नाम इस तरह से है:

delete array['key_name']

2
यह एक सरणी नहीं है! यह एक वस्तु है (हां, इन्हें JS में साहचर्य सरणियों कहा जाता है, लेकिन नहीं, वे वास्तव में नहीं हैं, और यदि आप JS सरणी के साथ काम करते हैं तो यह विधि हानिकारक है)।
विंटरकाउंटर

3

यह है कि मैं यह कैसे करेंगे

 myArray.splice( myArray.indexOf('bar') , 1) 

1
Array.prototype.indexOf () विधि किसी कुंजी के लिए नहीं बल्कि एक सरणी के भीतर एक मूल्य के लिए खोज करती है। तो यह काम नहीं करेगा।
नदव

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