2009-08-20 22 views
12

मेरे पास इस "1,2,3" की तरह एक सीएसवी स्ट्रिंग है और इससे वांछित मूल्य को निकालने में सक्षम होना चाहते हैं।अल्पविराम से अलग मूल्यों से मूल्य हटाएं

उदाहरण के लिए अगर मैं मूल्य निकालना चाहते हैं: 2, उत्पादन स्ट्रिंग निम्नलिखित होना चाहिए:

"1,3"

मैं निम्नलिखित कोड का उपयोग कर रहा हूँ, लेकिन अप्रभावी हो रहा है।

var values = selectedvalues.split(","); 
      if (values.length > 0) { 
       for (var i = 0; i < values.length; i++) { 
        if (values[i] == value) { 
         index = i; 
         break; 
        } 
       } 
       if (index != -1) { 
        selectedvalues = selectedvalues.substring(0, index + 1) + selectedvalues.substring(index + 3);      
       } 
      } 
      else { 
       selectedvalues = ""; 
      } 

उत्तर

37
var removeValue = function(list, value, separator) { 
    separator = separator || ","; 
    var values = list.split(separator); 
    for(var i = 0 ; i < values.length ; i++) { 
    if(values[i] == value) { 
     values.splice(i, 1); 
     return values.join(separator); 
    } 
    } 
    return list; 
} 

यदि मान आप देख रहे हैं पाया जाता है, तो उसे निकाल रहा है, और एक नया अल्पविराम सीमांकित सूची लौट आए। यदि यह नहीं मिला है, तो पुरानी सूची वापस आती है।

मेरी कोड गलती और वृद्धि को इंगित करने के लिए Grant Wagner पर धन्यवाद!

जॉन इस्तीफा (jQuery, मोज़िला) के पास JavaScript Array Remove के बारे में एक साफ लेख है जो आपको उपयोगी लगेगा।

+0

नीचे वोट क्यों? – doomspork

+0

आपको शायद डाउनवॉटेड किया गया है क्योंकि 'selectValues.split (",")' एक सरणी देता है, सरणी में जावास्क्रिप्ट में 'indexOf() 'विधि नहीं है। –

+0

आप महोदय, सही हैं! – doomspork

1

मान अब एक सरणी है। तो अपने आप को घुमाने के बजाय।

कार्य करें:

var index = values.indexOf(value); 
if(index >= 0) { 
    values.splice(index, 1); 
} 

किसी दिए गए सूचकांक से एक वस्तु को हटाने।

इस मदद करता है

+0

Btw। सरणी को एक स्ट्रिंग में फिर से प्राप्त करने के लिए ... बस करें: var somstring = values.join (','); – Jabezz

+1

@Jabezz: यह विफल रहता है जब 'मान' "1,12,2" होता है और आप "2" को हटाना चाहते हैं। –

0
function process(csv,valueToDelete) { 
    var tmp = ","+csv; 
    tmp = tmp.replace(","+valueToDelete,""); 
    if (tmp.substr(0,1) == ',') tmp = tmp.substr(1); 
    return tmp; 
} 
+0

एक बग है! कॉलिंग प्रक्रिया ('1,2,3,25,29,36', 2) "1,3,,9,36" लौटाएगी जब इसे "1,3,25,29,36" वापस करनी चाहिए। – LukeH

2

यहाँ आशा 2 संभव समाधान कर रहे हैं:

function removeValue(list, value) { 
    return list.replace(new RegExp(value + ',?'), '') 
} 

function removeValue(list, value) { 
    list = list.split(','); 
    list.splice(list.indexOf(value), 1); 
    return list.join(','); 
} 

removeValue('1,2,3', '2'); // "1,3" 

ध्यान दें कि यह केवल एक मूल्य की पहली आवृत्ति को हटा देगा।

यह भी ध्यान दें कि Array.prototype.indexOf ईसीएमएस्क्रिप्ट एड का हिस्सा नहीं है। 3 (यह जावास्क्रिप्ट 1.6 में पेश किया गया था - जेस्क्रिप्ट एक को छोड़कर सभी आधुनिक कार्यान्वयन में कार्यान्वित किया गया - और अब ईएस 5 में कोडित है)।

+1

पहला उदाहरण भी असफल होगा। 22, 32, 42, आदि। तो यह जवाब एक जवाब नहीं है। – epascarello

+4

सही कार्यान्वयन प्रतीत होता है के लिए Doomspork का उत्तर (http://stackoverflow.com/questions/1306164/1306225#1306225) देखें। –

+0

क्या यह काम करता है यदि निकालने के लिए कई मान हैं? – Breakthrough

1
// Note that if the source is not a proper CSV string, the function will return a blank string (""). 
function removeCsvVal(var source, var toRemove)  //source is a string of comma-seperated values, 
{             //toRemove is the CSV to remove all instances of 
    var sourceArr = source.split(",");    //Split the CSV's by commas 
    var toReturn = "";        //Declare the new string we're going to create 
    for (var i = 0; i < sourceArr.length; i++)  //Check all of the elements in the array 
    { 
     if (sourceArr[i] != toRemove)    //If the item is not equal 
      toReturn += sourceArr[i] + ",";   //add it to the return string 
    } 
    return toReturn.substr(0, toReturn.length - 1); //remove trailing comma 
} 

यह भी लागू करने के लिए अपने वर मान:

var values = removeVsvVal(selectedvalues, "2"); 
1

अनुमान im बहुत धीमी गति से लेकिन यहाँ मैं

<script language="javascript"> 
function Remove(value,replaceValue) 
{ var result = ","+value+","; 
result = result.replace(","+replaceValue+",",","); 
result = result.substr(1,result.length); 
result = result.substr(0,result.length-1); 
alert(result); 
} 

Remove("1,2,3",2) 
</script> 

क्या करेंगे से पहले जोड़ने, और स्ट्रिंग के बाद यह सुनिश्चित करें कि यू केवल सटीक स्ट्रिंग को दूर यू चाहते

0

उपयोग जोड़, पॉप या शिफ्ट। आपकी आवश्यकता के आधार पर।

तुम भी वस्तुओं की अनुक्रमणिका अपने सरणी में एक यहां पाया की तरह एक समारोह का उपयोग करके उस मैच "पा" हो सकता है: http://www.hunlock.com/blogs/Ten_Javascript_Tools_Everyone_Should_Have

var tmp = [5,9,12,18,56,1,10,42,'blue',30, 7,97,53,33,30,35,27,30,'35','Ball', 'bubble']; 
//   0/1/2 /3 /4/5 /6 /7  /8 /9/10/11/12/13/14/15/16/17/ 18/ 19/  20 
var thirty=tmp.find(30);    // Returns 9, 14, 17 
var thirtyfive=tmp.find('35');  // Returns 18 
var thirtyfive=tmp.find(35);   // Returns 15 
var haveBlue=tmp.find('blue');  // Returns 8 
var notFound=tmp.find('not there!'); // Returns false 
var regexp1=tmp.find(/^b/);   // returns 8,20 (first letter starts with b) 
var regexp1=tmp.find(/^b/i);   // returns 8,19,20 (same as above but ignore case) 

Array.prototype.find = function(searchStr) { 
    var returnArray = false; 
    for (i=0; i<this.length; i++) { 
    if (typeof(searchStr) == 'function') { 
     if (searchStr.test(this[i])) { 
     if (!returnArray) { returnArray = [] } 
     returnArray.push(i); 
     } 
    } else { 
     if (this[i]===searchStr) { 
     if (!returnArray) { returnArray = [] } 
     returnArray.push(i); 
     } 
    } 
    } 
    return returnArray; 
} 
+0

यह इंगित किया जाना चाहिए कि खोज विधि संशोधित कर रही है ऐरे प्रोटोटाइप जो कुछ डेवलपर्स के लिए वांछनीय से कम हो सकता है। इसका प्रभाव इरादे से परे विकिरण कर सकता है। – doomspork

6
function removeValue(list, value) { 
    return list.replace(new RegExp(",?" + value + ",?"), function(match) { 
     var first_comma = match.charAt(0) === ',', 
      second_comma; 

     if (first_comma && 
      (second_comma = match.charAt(match.length - 1) === ',')) { 
     return ','; 
     } 
     return ''; 
    }); 
}; 


alert(removeValue('1,2,3', '1')); // 2,3 
alert(removeValue('1,2,3', '2')); // 1,3 
alert(removeValue('1,2,3', '3')); // 1,2 
+0

यह कोड निकालने के लिए काम नहीं करेगा वैल्यू ('1,25,3', '2') – Rajapandian

0

या

var csv_remove_val = function(s, val, sep) { 
    var sep = sep || ",", a = s.split(sep), val = ""+val, pos; 
    while ((pos = a.indexOf(val)) >= 0) a.splice(pos, 1); 
    return a.join(sep); 
} 
संबंधित मुद्दे