Javascript 字符串操作-从列表中删除元素

Javascript 字符串操作-从列表中删除元素,javascript,Javascript,我有一个逗号分隔的值列表,我需要删除一个等于某个值的值 myList = '10,20,30'; myList.remove(20); // === '10,30' 拆分字符串以生成数组。一旦将其放入数组中,请删除需要删除的元素。然后再次输出字符串 或者您可以查找“20”,并将其替换为“” 拆分字符串以获得数组。一旦将其放入数组中,请删除需要删除的元素。然后再次输出字符串 或者您可以查找“20”,并将其替换为“” 我马上就要出发了,但解决方案的组成部分可能是: String#split,它根

我有一个逗号分隔的值列表,我需要删除一个等于某个值的值

myList = '10,20,30';
myList.remove(20); // === '10,30'

拆分字符串以生成数组。一旦将其放入数组中,请删除需要删除的元素。然后再次输出字符串


或者您可以查找“20”,并将其替换为“”

拆分字符串以获得数组。一旦将其放入数组中,请删除需要删除的元素。然后再次输出字符串


或者您可以查找“20”,并将其替换为“”

我马上就要出发了,但解决方案的组成部分可能是:

  • String#split
    ,它根据分隔符将字符串拆分为数组
  • Array#indexOf
    ,它在数组中查找条目(一些较旧的浏览器可能没有;在那些浏览器上,您必须执行循环)
  • Array#splice
    ,用于从数组中删除条目
  • Array#join
    ,它使用给定的分隔符将数组连接成字符串
…如果可能的话,可能会混合一些东西来处理散乱的空间


当然,你也可以在任意一端加逗号,然后用
String#indexOf
搜索“、20”,然后用
String#substring
获取前面和后面的位。但这有什么意思呢(它似乎有点脆弱。)

我正在冲刺,但解决方案的组成部分可能是:

  • String#split
    ,它根据分隔符将字符串拆分为数组
  • Array#indexOf
    ,它在数组中查找条目(一些较旧的浏览器可能没有;在那些浏览器上,您必须执行循环)
  • Array#splice
    ,用于从数组中删除条目
  • Array#join
    ,它使用给定的分隔符将数组连接成字符串
…如果可能的话,可能会混合一些东西来处理散乱的空间


当然,你也可以在任意一端加逗号,然后用
String#indexOf
搜索“、20”,然后用
String#substring
获取前面和后面的位。但这有什么意思呢(而且似乎有点脆弱。)

一些人几乎不得不更换
工作

var lists = ['20', '10,20', '20,30', '10,20,30', '120,200,2020'];
for (var i=0; i<lists.length; ++i) {
    lists[i] = lists[i].replace(/(^|,)20,|(^|,)20$/,'$1');
}
var列表=['20','10,20','20,30','10,20,30','1202002020'];

对于(var i=0;i少数人几乎有
replace
工作

var lists = ['20', '10,20', '20,30', '10,20,30', '120,200,2020'];
for (var i=0; i<lists.length; ++i) {
    lists[i] = lists[i].replace(/(^|,)20,|(^|,)20$/,'$1');
}
var列表=['20','10,20','20,30','10,20,30','1202002020'];
对于(var i=0;i,这里有一些经过测试和编辑的代码,可以满足您的要求

if (!String.prototype.removeListItem) {
   String.prototype.removeListItem = function(value, delimiter) {
      delimiter = delimiter || ',';
      value = value.toString();
      var arr = this.split(delimiter),
         index = arr.indexOf(value);
      while (index >= 0) {
         arr.splice(index, 1);
         index = arr.indexOf(value);
      }
      return arr.join(delimiter);
   };
}

alert('10,20,30,120,200'.removeListItem(20));
// yields '10,30,120,200'
但是,我质疑您为什么要这样做。数组应该存储在数组对象中,而不是字符串文本中。如果需要显示列表,请在显示时转换为带分隔符的列表。如果您的输入是字符串,请在输入时将其拆分,并在内部将其作为数组保存。我坚信这是您和您的最佳做法从长远来看,您将有更容易维护、更容易理解的代码。

以下是一些经过测试和编辑的代码,可以满足您的要求

if (!String.prototype.removeListItem) {
   String.prototype.removeListItem = function(value, delimiter) {
      delimiter = delimiter || ',';
      value = value.toString();
      var arr = this.split(delimiter),
         index = arr.indexOf(value);
      while (index >= 0) {
         arr.splice(index, 1);
         index = arr.indexOf(value);
      }
      return arr.join(delimiter);
   };
}

alert('10,20,30,120,200'.removeListItem(20));
// yields '10,30,120,200'

但是,我质疑您为什么要这样做。数组应该存储在数组对象中,而不是字符串文本中。如果需要显示列表,请在显示时转换为带分隔符的列表。如果您的输入是字符串,请在输入时将其拆分,并在内部将其作为数组保存。我坚信这是您和您的最佳做法从长远来看,您将更容易维护更容易理解的代码。

要删除的值是否保证在列表中最多出现一次?我将重新构造它,使其成为“removeIntValueFromString(myList);”与向string对象添加方法相反。要删除的值是否保证在列表中最多出现一次?我将对其进行重新构造,使其成为“removeIntValueFromString(myList);”与向字符串对象添加方法不同。Erik,感谢您的代码,特别是警告。逗号分隔列表是一个可以有多个值的数据元素。Erik,感谢您的代码,特别是警告。逗号分隔列表是一个可以有多个值的数据元素价值