Javascript 如何从给定字符串中清除?

Javascript 如何从给定字符串中清除?,javascript,arrays,string,loops,Javascript,Arrays,String,Loops,我有这样的数据 var abc =",,,,,,,,,,,,,,,paul,2000,12sc21,logan,123,21sdf34,vfsarwe,456456,32fd23"; abc = abc.split(","); let stub={}; var results=[]; var key=["name","value","acc"]; var i=0; var j=0; for( var i = 0

我有这样的数据

var abc =",,,,,,,,,,,,,,,paul,2000,12sc21,logan,123,21sdf34,vfsarwe,456456,32fd23";
abc = abc.split(",");

let stub={};
        var results=[];
        var key=["name","value","acc"];
        var i=0;
        var j=0;

        for( var i = 0 ; i <abc.length - 1;i++){
           stub[key[j]=abc[i];
           j++
           if(j==3){
               results.push(stub);
               stub={};
               j=0;
    }
}
         abc = results;
但无法获得所需的输出。此输出仅在字符串启动时没有,,,,,,时出现。但我得到的数据有时在陈述中有,,,。

您可以使用:

abc.replace(/,+/g, ',').replace(/^,|,$/g, '').split(',');
在执行拆分之前,正则表达式替换删除您不感兴趣的数据

一旦数组被实例化,过滤器(布尔值)将从数组中删除项

编辑

var abc =",,,,,,,,,,,,,,,paul,2,000,12sc21,logan,123,21sdf34,vfsarwe,456456,32fd23";
var array = abc.replace(/,+/g, ',').replace(/^,|,$/g, '').split(/,([0-9,]+),/);
array = array.filter(Boolean).reduce(function(acc, item) {
    if (item.match(/^[0-9,]+$/)) {
      acc.push(item);
    } else {
      acc = acc.concat(item.split(','));
    }
    return acc;
}, []);

您可以使用
abc.replace(/(^[,\s]+)/g',)
从字符串中删除前导逗号或空格。您的
for
循环也没有运行足够长的时间;它一直循环,直到数组中只剩下一个元素,然后停止

改变

for(var i = 0 ; i < abc.length-1; i++) 
for(变量i=0;i

for(变量i=0;i
var abc=“,,,,,,,,,,,,paul,2000,12sc21,logan,123,21sdf34,vfsarwe,456456,32fd23”;
abc=abc.replace(/(^[,\s]+)|([,\s]+$)/g')。split(“,”);
设存根={};
var结果=[];
变量键=[“名称”、“值”、“acc”];
var i=0;
var j=0;
对于(变量i=0;i
您可以使用
.replace(/^\,+/,'')
删除所有前导逗号,然后用逗号分割得到一个
数组
,然后使用
3
作为步骤循环此
数组
,并构建您的结果:

var abc = ",,,,,,,,,,,,,,,paul,2000,12sc21,logan,123,21sdf34,vfsarwe,456456,32fd23";
var arr = abc.replace(/^\,+/, '').split(",");
var results = [];

for (var i = 0; i < arr.length; i = i + 3) {
  results.push({
    "name": arr[i],
    "value": arr[i + 1],
    "acc": arr[i + 2]
  });
}
var abc=“,,,,,,,,,,,,paul,2000,12sc21,logan,123,21sdf34,vfsarwe,456456,32fd23”;
var arr=abc.replace(/^\,+/,'').split(“,”);
var结果=[];
对于(变量i=0;i
演示:

var abc=“,,,,,,,,,,,,paul,2000,12sc21,logan,123,21sdf34,vfsarwe,456456,32fd23”;
var arr=abc.replace(/^\,+/,'').split(“,”);
var结果=[];
对于(变量i=0;i控制台日志(结果)您在
上拆分数据的做法是正确的。然后,您可以将数据分成3个数据块,然后将每个数据块映射到一个dict

var data=“,,,,,,,,,,,,,paul,2000,12sc21,logan,123,21sdf34,vfsarwe,456456,32fd23”;
var split=data.split(“,”);
var chunked=[];
while(拆分长度){
分块推(分割拼接(0,3));
}
var res=chunked.map((i)=>{
如果(!i[0]| |!i[1]| |!i[2]){
返回null;
}
返回{
名称:i[0],
值:i[1],
行政协调会:一[2]
};
}).filter((i)=>i!==null);

控制台日志(res)请共享您尝试过的代码。这些空条目的数量始终是3的倍数吗?是的条目始终是3的倍数。这有点问题,因为它不会导致所需的解决方案(
abc=[{“name”:“paul”,“value”:“2000”,“acc”:“12sc21”}…];
)。还是我误读了这个问题?我相信这个代码只会替换问题中代码的第二行,从那一点上说,原始代码应该仍然有效。@DavidThomas标题是“清理
”,
我假设这就是问题所在。我认为如果2000的值是2000的形式,456456的值是456456的形式,那么它将不起作用。有没有办法,如果这种值出现,它会把2000当作2000而不是2000@shalabh您可以尝试使用
abc.split(/,(?!\d)/).filter(布尔值)如果后面没有数字,它将以逗号分隔。感谢代码看起来很好。我现在将用我的代码测试它。我认为如果值2000是2000的形式,456456是456456的形式,它将不起作用。我认为如果值2000是2000的形式,456456是456456456的形式,它将不起作用。有没有办法,如果这种值出现,它会把2000当作2000而不是2000@shalabh不,这样就不起作用了,那样的话,你怎么能把
2000,12sc21
分开呢?
for(var i = 0 ; i < abc.length-1; i++) 
for(var i = 0 ; i < abc.length; i++)
var abc = ",,,,,,,,,,,,,,,paul,2000,12sc21,logan,123,21sdf34,vfsarwe,456456,32fd23";
var arr = abc.replace(/^\,+/, '').split(",");
var results = [];

for (var i = 0; i < arr.length; i = i + 3) {
  results.push({
    "name": arr[i],
    "value": arr[i + 1],
    "acc": arr[i + 2]
  });
}