代码之家  ›  专栏  ›  技术社区  ›  Raúl Roa

从逗号分隔的值字符串中删除值

  •  13
  • Raúl Roa  · 技术社区  · 16 年前

    我有一个类似“1,2,3”的csv字符串,希望能够从中删除所需的值。

    例如,如果要删除值: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 = "";
                }
    
    9 回复  |  直到 16 年前
        1
  •  47
  •   Community Mohan Dere    9 年前
    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 为了指出我的代码错误和改进!

    JavaScript Array Remove 你可能会发现这很有用。

        2
  •  6
  •   yohann richard    16 年前
    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
    
        3
  •  3
  •   Jabezz    16 年前

    值现在是一个数组。因此,不要自己进行遍历。

    做:

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

    从给定索引中删除单个对象。

    希望这有帮助

        4
  •  3
  •   kangax    16 年前

    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

        5
  •  1
  •   Breakthrough    16 年前
    // 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值,请执行以下操作:

    var values = removeVsvVal(selectedvalues, "2");
    
        6
  •  1
  •   Lil'Monkey    16 年前

    我想我太慢了,但我会这么做

    <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>
    

    在字符串之前和之后添加,确保只删除所需的字符串

        7
  •  0
  •   Alex Rodrigues    16 年前
    function process(csv,valueToDelete) {
      var tmp = ","+csv;
      tmp = tmp.replace(","+valueToDelete,"");
      if (tmp.substr(0,1) == ',') tmp = tmp.substr(1);
      return tmp;
    }
    
        8
  •  0
  •   Joshua    16 年前

    使用 捻接 , 流行音乐 转移 . 根据您的要求。

    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;
    }
    
        9
  •  0
  •   mykhal    16 年前

    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);
    }