【问题标题】:Convert multiple whitespaces into one whitespace in array [duplicate]将多个空格转换为数组中的一个空格[重复]
【发布时间】:2017-06-08 16:56:27
【问题描述】:

我在一个名为 foo 的对象中有不同数量的元素

事先不知道对象的数量,如何将所有多个空格转换为一个空格?

这样

var foo = [[day_1: "Hello World   "], [day_2:"  Hello World"], [day_3: "Hello World   "], [day_4: "Hello World"], [day_5:"     Hello World   "], [day_6: "Hello World"], [day_7: "Hello  World"]] 

会变成:

var output = [[day_1: "Hello World "], [day_2: " Hello World"], [day_3: "Hello World "], [day_4: "Hello World"], [day_5: " Hello World "], [day_6: "Hello World"], [day_7: "Hello World"]]

到目前为止,我已经尝试过了,但它没有产生预期的输出,因为它应该是 for each 循环格式:

foo.replace(/ +(?= )/g,'')

【问题讨论】:

    标签: javascript


    【解决方案1】:

    您想遍历数组并将所有出现的空白替换为单个空格。可以这样做:

    var output = [];
    for (var i = 0; i < foo.length; i++) {
        var temp={};
        Object.getOwnPropertyNames(foo[i]).forEach(function(val, idx, array) {        
           temp[val]=foo[i][val].replace(/\s+/g, ' ');
        });
        output.push(temp);
    }
    

    您似乎尝试将该方法应用于整个数组,却忘记将其应用于数组中的每个字符串。

    仅供参考:

    正则表达式中的\s 替换所有空格,而不仅仅是空格。

    这会遍历每个对象的每个属性并替换每个对象的值。

    【讨论】:

    • 这不是\W 所做的——我认为你想要\s
    • 谢谢,我会改正的。
    • 我已经编辑了原始问题 - foo 实际上是一个对象
    • 好的更新答案!
    【解决方案2】:

    因此,如果我理解正确,您希望遍历数组并将所有运行的空白替换为单个空格。可以这样做:

    var output = [];
    for (var i = 0; i < foo.length; i++) {
        output.push(foo[i].replace(/ +/g, ' '));
    }
    

    除非我遗漏了什么,否则应该不需要您在正则表达式中应用的积极前瞻。

    您可以交替地以函数式样式执行此操作,如下所示:

    var output = foo.map(function(part) { return part.replace(/ +/g, ' ') });
    

    【讨论】:

    • 我得到 foo.map 不是一个函数 - 我编辑了这个问题 = foo 实际上是一个包含数组的对象
    • 抱歉,我已经编辑了原始问题
    猜你喜欢
    • 2013-07-03
    • 1970-01-01
    • 1970-01-01
    • 2011-01-05
    • 1970-01-01
    • 1970-01-01
    • 2014-06-03
    • 2011-03-18
    相关资源
    最近更新 更多