2010-09-22 10 views
5

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

var array = ["google","chrome","os","windows","os"]; 

मैं सरणी एक स्ट्रिंग बनने के बिना सरणी से मूल्य "chrome" को हटाना चाहते है। क्या इसे करने का कोई तरीका है?

+17

मुझे यह विश्वास करना मुश्किल लगता है कि क्रोमडेड नाम का कोई व्यक्ति अपनी सरणी से _delete_ क्रोम करना चाहता है। – ChessWhiz

+0

@ चेसविज़ हाहा, उस बारे में भी नहीं सोचा था, लेकिन यह मेरी सरणी में है और इसे हटाया जाना चाहिए :) – chromedude

उत्तर

5

इसे ढूंढने और फिर इसे हटाने से कोई तेज़ तरीका नहीं है। इसे ढूंढना आप लूप के साथ कर सकते हैं या (इसे लागू करने वाले कार्यान्वयन में) indexOf। इसे हटाने से आप splice के साथ कर सकते हैं।

लाइव उदाहरण: http://jsbin.com/anuta3/2

var array, index; 
array = ["google","chrome","os","windows","os"]; 
if (array.indexOf) { 
    index = array.indexOf("chrome"); 
} 
else { 
    for (index = array.length - 1; index >= 0; --index) { 
    if (array[index] === "chrome") { 
     break; 
    } 
    } 
} 
if (index >= 0) { 
    array.splice(index, 1); 
} 
+0

क्या यह आईई में काम करेगा? मुझे लगता है कि कहीं कहीं यह देखने को याद नहीं आया कि यह 'indexOf' का समर्थन नहीं करता है? –

+0

टीजे की तरह उल्लेख किया गया है, सभी ब्राउज़रों को इंडेक्स लागू नहीं किया गया है। आपको अपना खुद का कार्यान्वयन करने की आवश्यकता हो सकती है। – DashK

+0

@ डेविड: सभी कार्यान्वयन में यह नहीं है, इसलिए उत्तर के "लूप के साथ" भाग है। :-) आम तौर पर मैं केवल 'indexOf' को 'Array.prototype' में जोड़ता हूं यदि यह पहले से मौजूद नहीं है। –

2

splice ऐरे वर्ग की विधि का उपयोग करें।

array.splice(1, 1); 
3

यह इसे लपेटता एक सुविधाजनक समारोह में:

function remove_element(array, item) { 
    for (var i = 0; i < array.length; ++i) { 
    if (array[i] === item) { 
     array.splice(i, 1); 
     return; 
    } 
    } 
} 

var array = ["google", "chrome", "os", "windows", "os"]; 
remove_element(array, "chrome"); 

या (ब्राउज़रों कि समर्थन indexOf के लिए):

function remove_element(array, item) { 
    var index = array.indexOf(item); 
    if (-1 !== index) { 
    array.splice(index, 1); 
    } 
} 

संपादित करें: फिक्स्ड === और !== के साथ।

+1

आपको वास्तव में '===' और '! =' के बजाय '===' और '! =' का उपयोग करना चाहिए। –

+0

@ भालू आपको खाएंगे: '==' में '(-1! == अनुक्रमणिका)' की आवश्यकता नहीं है ... सूचकांक एक संख्या के रूप में जाना जाता है, क्योंकि यह सभी अनुक्रमणिका है, अगर वापस आ जाएगा, और -1 को जाना जाता है एक संख्या हो। तो सख्त तुलना की कोई ज़रूरत नहीं है। मैं आमतौर पर कुछ पसंद करता हूं जैसे '(इंडेक्स> -1)'; YMMV। –

2

splice() विधि तत्वों को/से तत्वों को जोड़ता है और/या हटा देता है, और हटाए गए तत्व (ओं) देता है।

array.splice(indexOfElement,noOfItemsToBeRemoved); 

अपने मामले

array.splice(1, 1); 
1

आप है कि क्या उसके अपने सरणी में है या नहीं शेष तत्वों के सूचकांकों को बनाए रखने के लिए आवश्यक का उल्लेख नहीं था में। आधार है कि आप एक सरणी के अपरिभाषित सदस्यों होने के साथ सौदा कर सकते हैं, आप कर सकते हैं:

var array = ["google","chrome","os","windows","os"]; 
delete array[1]; 

सरणी [1] तो अपरिभाषित हो जाएगा।

+0

धन्यवाद, लेकिन मुझे एक अपरिभाषित मूल्य नहीं चाहिए। – chromedude

2
You may want to remove all of the items that match your string, 
or maybe remove items that pass or fail some test expression. 
Array.prototype.filter, or a substitute, is quick and versatile: 


var array= ["google","chrome","os","windows","os"], 
b= array.filter(function(itm){ 
    return 'os'!= itm 
}); 
alert(b) 
संबंधित मुद्दे

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