2011-06-06 60 views
1

我有一个以逗号分隔的值列表,我需要删除等于某个值的列表。字符串操作 - 从列表中删除元素

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

保证在列表中最多只能删除一次的值是否被删除? – outis 2011-06-06 21:40:45

+0

我会重构它,所以它是“removeIntValueFromString(myList);”而不是向字符串对象添加方法。 – rob 2011-06-06 22:08:12

回答

1

下面是一些测试jslint编代码,做你问什么。

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' 

但是,我质疑你为什么要这样做。数组应该存储在数组对象中,而不是字符串文字中。如果您需要显示列表,则在显示时转换为分隔列表。如果你的输入是一个字符串,那么在输入时分割它,并把它作为一个数组保存。我真的坚信这是你的最佳实践,从长远来看,维护代码更容易理解。

+0

埃里克,感谢代码,特别感谢你的劝告。逗号分隔列表是一个数据元素,可以有多个值。 – 2011-06-07 04:01:19

0

分割字符串给你一个数组。一旦你在数组中,删除你需要删除的元素。然后再输出字符串。

或者你可以用''找到并替换'20'。

+0

您的'替换'建议需要一些工作。 – ErikE 2011-06-06 21:47:53

2

我冲断,但该溶液的组成部件可能会是:

  • String#split,其将字符串转换成基于一个定界符的阵列。
  • Array#indexOf,它在数组中找到一个条目(一些旧的浏览器可能没有它;在那些上,你必须做一个循环)。
  • Array#splice,其中(除其他外)从数组中删除条目。
  • Array#join,它使用给定的分隔符将数组连接成一个字符串。

...可能有些东西混合在那里来处理流浪的空间,如果它们是可能的话。

或者当然,您可以在任一端输入逗号,然后搜索“,20”,使用String#indexOf并使用String#substring来获取前面和后面的位。但那有什么好玩的。 ;-)(看起来有点脆弱。)

1
var myArray = myList.split(','); 
myArray.splice(1,1); // Remove one element at index 1, which is 20 in your example 
myList = myArray.toString(); 
1

几个人差不多有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'); 
} 

结果:

["", "10", "30", "10,30", "120,200,2020"]
+0

爱得RegEx – 2011-06-07 04:01:57