添加" +"在使用jQuery的字符串中的每个单词之前

时间:2017-02-28 11:09:18

标签: javascript jquery arrays string

我使用javascript创建了一个数组" outData",如下所示:

outdata array

我现在正试图:

  1. 使用jQuery循环遍历outData数组;
  2. 如果复选框名为' bmm'勾选,将outData数组中的字符串拆分为单个单词;
  3. 添加" +"在每个单词之前签名;
  4. 最后,将带有加号的单词加入到新的字符串中(每个单词之间有一个空格)并推入一个名为" outPlus"的新数组。
  5. 我坚持如何在从字符串中拆分每个单词之前正确添加加号。

    我的代码目前看起来像这样:

    $(document).ready(function() {
    
        $("#multi").submit(function(e) {
            e.preventDefault();
            $("#output").empty();
            var array1 = [];
            var array2 = [];
            var array3 = [];
            $(".col1").each(function() {
                var word1 = $(this).val();
                if ( word1 !== "" ) {
                    //word1 = word1.replace(/\s+/g, '');
                    array1.push(word1);
                }
            });
            $(".col2").each(function() {
                var word2 = $(this).val();
                if ( word2 !== "" ) {
                    //word2 = word2.replace(/\s+/g, '');
                    array2.push(word2);
                }
            });
            $(".col3").each(function() {
                var word3 = $(this).val();
                if ( word3 !== "" ) {
                    //word3 = word3.replace(/\s+/g, '');
                    array3.push(word3);
                }
            });
            console.log(array1);
            console.log(array2);
            console.log(array3);
            var outData = [];
            var outPlus = [];
            $(array1).each(function( a, b ) {
                $(array2).each(function ( c, d ) {
                    outData.push( b + " " + d );
                    $(array3).each(function( e, f ) {
                        outData.push( b + " " + d + " " + f );
                    });
                });
            });
    
            console.log(outData);
    
            if ( $("input[name='bmm']").prop("checked") == true ) {
                $(outData).each(function( g, h ) {
                    outPlus.push( h.split(" ") );
                });
    
                console.log(outPlus);
    
                $(outPlus).each(function( i, j ) {
                        var output = j.replace(/(^|\s)/g, '$1+');
                        console.log(j);
                    });
            }
    
            console.log(outPlus); //Uncaught TypeError: j.replace is not a function
        });
    
    });
    

    当前输出:

    Uncaught TypeError: j.replace is not a function
    

    期望的输出:

    +used +car
    +used +car +for +sale
    +used +car +on +sale
    etc...
    

    非常感谢帮助产生预期的结果。非常感谢提前。

5 个答案:

答案 0 :(得分:1)

要解决此问题,您可以使用正则表达式,该表达式跟随任何空格字符或字符串中的第一个字符,并带有+。试试这个:

$(outPlus).each(function(i, j ) {
  var output = j.replace(/(^|\s)/g, '$1+');
  console.log(j);
});

这是一个简化的例子:

var outData = [
  'used car',
  'used car for sale',
  'used car on sale',
  'used cars'
];

outData = outData.map(function(text) {
  return text.replace(/(^|\s)/g, '$1+');
});

console.log(outData);

答案 1 :(得分:1)

@ Rory的替代方法是使用/(\w+)/g正则表达式。

想法是捕获所有单词并用+$1

替换它们

获取新阵列

var outData = [
  'used car',
  'used car for sale',
  'used car on sale',
  'used cars'
];

var output = outData.map(function(text) {
  return text.replace(/(\w+)/g, '+$1');
});

console.log(output);

替换原始数组

var outData = [
  'used car',
  'used car for sale',
  'used car on sale',
  'used cars'
];

outData.forEach(function(text, i, a) {
  a[i] = text.replace(/(\w+)/g, '+$1');
});

console.log(outData);

答案 2 :(得分:0)

join()之后需要一次性使用split()来将您的数组与+符号连接起来,如下所示(简单)。

var outData = ['used car', 'used car for sale', 'used car on sale'];
   
var outPlus = [];

$(outData).each(function( g, h ) {
    outPlus.push("+"+h.split(" ").join(' +'));
});
console.log(outPlus);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

答案 3 :(得分:0)

您可以在最后一个console.log行输出,这会很快将输出更改为您想要的输出:

console.log('+used,car,on,sale'.replace(/,/g, ' +'))

它基本上替换了空格和+的逗号,它快速简单,否则我会使用.split方法并将逗号分开,并从返回的数组重新构建。

答案 4 :(得分:0)

在这里没有jquery,试试这个:

如果您不想使用es6函数语法=>,则可以始终使用旧的function

const data = [
  'used car',
  'used car for sale and something else'
]

const addPlus = data => data.replace(/\+?(\S+)/g, '+$1')

const addPlusInArray = array => array.map(addPlus)

console.log(addPlusInArray(data))

.replace(
/\+?(\S+)/g找到任何非空格(可选+前方)
'+$1'替换第一个捕获组的内容 )

.map (
此函数的addPlus结果与第一个参数一起使用,因为数组元素将成为新数组的新内容 )