【问题标题】:How to clean , from a given string?如何从给定的字符串中清除?
【发布时间】:2018-08-20 14:46:53
【问题描述】:

我有这样的数据。

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;

我想以具有这 3 个键的对象数组的形式排列这些值:

输出应该是:

abc = [{"name": "paul", "value": "2000","acc":"12sc21"},{"name":"logan","value":"123","acc":"21sdf34"},{"name":"vfsarwe","value":"456456","acc":"32fd23"}];

但无法获得所需的输出。此输出仅在字符串开始时没有 ,,,,,, 时出现。但我得到的数据有时有 ,,,,, 在陈述中。

【问题讨论】:

  • 请分享您尝试过的代码。
  • 那些空条目的数量总是3的倍数吗?
  • 是的,条目总是 3 的倍数。

标签: javascript arrays string loops


【解决方案1】:

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

改变

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";
abc = abc.replace(/(^[,\s]+)|([,\s]+$)/g, '').split(",");

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

        for(var i = 0 ; i < abc.length; i++){
           stub[key[j]]=abc[i];
           j++
           if(j==3){
               results.push(stub);
               stub={};
               j=0;
    }
}
abc = results;
console.log(abc);

【讨论】:

  • 感谢代码看起来不错。我现在将用我的代码对其进行测试。
  • 我认为如果该值 2000 是 2,000 的形式,而 456456 是 456,456 的形式,它将不起作用。
【解决方案2】:

您可以使用.replace(/^\,+/, '') 删除所有前导逗号,然后用逗号分隔以获得array,然后使用3 作为步骤循环此array 并构建您的结果:

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 results = [];

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

console.log(results);

【讨论】:

  • 我认为如果该值 2000 是 2,000 的形式,而 456456 是 456,456 的形式,它将不起作用。有没有办法,如果这种价值来了,它会将 2,000 视为 2,000 而不是 2,000
  • @shalabh 不行,这样不行,那样的话你怎么能分开2000,12sc21
【解决方案3】:

您在, 上拆分数据是正确的。然后,您可以将数据分成 3 个块,然后将每个块映射到一个字典。

var data = ",,,,,,,,,,,,,,,paul,2000,12sc21,logan,123,21sdf34,vfsarwe,456456,32fd23";
var split = data.split(",");
var chunked = [];
while (split.length) {
    chunked.push(split.splice(0,3));
}
var res = chunked.map((i) => {
    if (!i[0] || !i[1] || !i[2]) {
        return null;
    }
    return {
      name: i[0],
      value: i[1],
      acc: i[2]
    };
}).filter((i) => i !== null);
console.log(res);

【讨论】:

    【解决方案4】:

    你可以使用:

    abc.replace(/,+/g, ',').replace(/^,|,$/g, '').split(',');
    

    正则表达式替换在执行拆分之前删除您不感兴趣的数据。

    abc.split(',').filter(Boolean);
    

    一旦数组被实例化,过滤器(布尔)将从数组中删除could be the equivalent of false 的项目。

    编辑

    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 = [{"name": "paul", "value": "2000","acc":"12sc21"}...];)。还是我误读了这个问题?
    • 我相信这段代码只是替换了问题中代码的第二行,从那时起原始代码应该仍然可以工作。
    • @DavidThomas 标题说要清理 , 我认为这是问题所在。
    • 我认为如果该值 2000 是 2,000 的形式,而 456456 是 456,456 的形式,它将不起作用。有没有办法,如果这种价值来了,它会将 2,000 视为 2,000 而不是 2,000
    • @shalabh 您可以尝试使用abc.split(/,(?!\d)/).filter(Boolean);,如果后面没有数字,它将以逗号分隔。
    猜你喜欢
    • 2011-12-08
    • 1970-01-01
    • 2021-12-15
    • 2021-03-12
    • 2020-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多