我使用javascript
创建了一个数组" outData",如下所示:
我现在正试图:
我坚持如何在从字符串中拆分每个单词之前正确添加加号。
我的代码目前看起来像这样:
$(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...
非常感谢帮助产生预期的结果。非常感谢提前。
答案 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
结果与第一个参数一起使用,因为数组元素将成为新数组的新内容
)