从逗号分隔值中删除值字符串
我有一个像这样的“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 = "";
}
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指出我的代码错误和增强!
John Resign(jQuery,Mozilla)有一篇关于JavaScript Array Remove的整洁的文章,您可能会发现它很有用。
值现在是一个数组。所以不要自己穿越。
做:
var index = values.indexOf(value);
if(index >= 0) {
values.splice(index, 1);
}
从给定的索引中删除单个对象。
希望这有助于
BTW。再次将数组转换为字符串...只是: var somstring = values.join(','); – Jabezz 2009-08-20 13:34:31
@Jabezz:当'value'是“1,12,2”,并且你想删除“2”时失败。 – 2009-08-20 17:40:11
function process(csv,valueToDelete) {
var tmp = ","+csv;
tmp = tmp.replace(","+valueToDelete,"");
if (tmp.substr(0,1) == ',') tmp = tmp.substr(1);
return tmp;
}
有一个错误!调用过程('1,2,3,25,29,36',2)返回“1,3,5,9,36”时应返回“1,3,25,29,36”。 – LukeH 2009-08-20 21:15:18
这里有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"
注意,这只会移除值的第一次出现。请注意0不是ECMAScript编辑的一部分。 3(它是在JavaScript 1.6中引入的 - 在除了JScript之外的所有现代实现中实现 - 现在已经在ES5中编码)。
第一个例子也会失败。 22,32,42等等,所以这个答案不是答案。 – epascarello 2009-08-20 14:29:02
请参阅Doomspork的答案(http://stackoverflow.com/questions/1306164/1306225#1306225)看起来是一个正确的实现。 – 2009-08-20 18:20:24
如果有多个要删除的值,它会工作吗? – Breakthrough 2009-08-20 19:07:08
// 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");
猜测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>
之前添加,字符串后确保ü只能去除确切的字符串ü要
使用拼接,流行或转变。取决于您的要求。
你也可以有使用功能,如一个在这里找到你的数组中的“查找”项的指标那场比赛: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;
}
应该指出find方法正在修改数组原型对于某些开发人员来说可能不太理想。它的影响可能超出预期的范围。 – doomspork 2009-08-20 17:56:57
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
此代码不适用于removeValue('1,25,3','2') – Rajapandian 2018-02-08 18:40:10
或
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);
}
为什么倒票? – doomspork 2009-08-20 13:52:09
您可能会因为'selectedValues.split(“,”)'返回一个数组而导致downvoted,因此数组在JavaScript中没有'indexOf()'方法。 – 2009-08-20 17:38:20
您先生,是正确的!感谢您指出, – doomspork 2009-08-20 17:49:03