Javascript 从逗号分隔的值字符串中删除值
我有一个类似“1,2,3”的csv字符串,希望能够从中删除所需的值 例如,如果要删除值:2,则输出字符串应如下所示: “1,3” 我正在使用以下代码,但似乎无效Javascript 从逗号分隔的值字符串中删除值,javascript,csv,Javascript,Csv,我有一个类似“1,2,3”的csv字符串,希望能够从中删除所需的值 例如,如果要删除值:2,则输出字符串应如下所示: “1,3” 我正在使用以下代码,但似乎无效 var values = selectedvalues.split(","); if (values.length > 0) { for (var i = 0; i < values.length; i++) { if (valu
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 values=selectedvalues.split(“,”);
如果(value.length>0){
对于(变量i=0;i
值现在是一个数组。因此,不要自己进行遍历
做:
从给定索引中删除单个对象
希望这有帮助这里有两种可能的解决方案:
function process(csv,valueToDelete) {
var tmp = ","+csv;
tmp = tmp.replace(","+valueToDelete,"");
if (tmp.substr(0,1) == ',') tmp = tmp.substr(1);
return tmp;
}
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
不是ECMAScript ed.3的一部分(它是在JavaScript 1.6中引入的,在除JScript one之外的所有现代实现中实现,现在在ES5中编码)。var removeValue=函数(列表、值、分隔符){
分隔符=分隔符| |“,”;
var值=list.split(分隔符);
对于(变量i=0;i
如果找到了要查找的值,则会将其删除,并返回一个新的逗号分隔列表。如果未找到,则返回旧列表
感谢您指出我的代码错误和增强
John Diplit(jQuery,Mozilla)有一篇简洁的文章,你可能会发现它很有用。我猜我的速度太慢了,但下面是我要做的
<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>
函数删除(值,替换值)
{var result=“,”+value+,”;
结果=结果。替换(“,”+replaceValue+”,“,”,”);
result=result.substr(1,result.length);
result=result.substr(0,result.length-1);
警报(结果);
}
移除(“1,2,3”,2)
在字符串前后添加,确保只删除所需的确切字符串使用拼接、弹出或移位。根据您的要求 您还可以使用如下函数“查找”数组中匹配项的索引:
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三十=tmp.find(30);//返回9、14、17
变量thirtyfive=tmp.find('35');//返回18
变量thirtyfive=tmp.find(35);//返回15
var haveBlue=tmp.find('blue');//返回8
var notFound=tmp.find('nothere!');//返回false
var regexp1=tmp.find(/^b/);//返回8,20(第一个字母以b开头)
var regexp1=tmp.find(/^b/i);//返回8,19,20(与上面相同,但忽略大小写)
Array.prototype.find=函数(searchStr){
var returnArray=false;
对于(i=0;i或
顺便说一句,若要将数组再次放入字符串中…只需执行:var somstring=values.join(',);@Jabezz:value
为“1,12,2”时,此操作将失败,您希望删除“2”。第一个示例也将失败。22、32、42等。因此此答案不是答案。请参阅Doomsprock的答案()这似乎是一个正确的实现。数组方法很聪明。请注意,它确实进行了类型强制。var a=[1,2,3,4,'1','2','3'];console.log(a.toString().replace(new RegExp('1'+',?','g'),'');//返回2,3,4,2,3我成功地使用了上一个方法。您可能会因为selectedValues.split(“,”)而被否决
返回一个数组,数组在JavaScript中没有indexOf()
方法。+1.在您的更改后似乎工作可靠。最后一个建议是,使用签名函数(列表、值、分隔符)
并添加分隔符=分隔符| |“,”;
。这将使它成为一个通用函数,可以从任何分隔字符串中删除值。您已经添加了分隔符,但没有使用它,应该是:list.split(separator)
和values.join(separator)
需要指出的是,find方法正在修改数组原型,这对某些开发人员来说可能不太理想。它的影响可能超出预期范围。有一个bug!调用过程('1,2,3,25,29,36',2)将在返回“1,3,5,9,36”时返回“1,3,5,9,36”。此代码对removeValue不起作用('1,25,3', '2')
// 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");
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;
}
<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>
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;
}
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
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);
}