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]
});
}