我正在尝试从输入创建字符串,但是以独特的方式设置了格式。
输入将是单个单词:word1
在第一个输入出现之前,字符串将为空,然后字符串myString
将为+(-word1)
。
对于第二个输入:word2
,myString
现在需要看起来像:
+(-word1+(-word2))
为清楚起见,第三个输入:word3
,myString
现在是:
+(-word1+(-word2+(-word3)))
我相信,这将需要比普通字符串连接更巧妙的东西。我宁愿不使用循环。
这是我所做的
var myString = '';
function someFunction()
{
...
var inputString = document.getElementById('my-input').value;
myString = myString + "+(" + "-" + inputString + ")";
}
但这会产生
+(-word1)+(-word2)
这很有意义,因为字符串只是在函数中串联在一起,需要发生的是某种插入。是否有Javascript方法可以使此插入操作更容易?也许像在当前字符串的倒数第二个空格插入新字符串一样?但是,它不是一个数组,因此我在这里不了解最佳做法。
答案 0 :(得分:2)
不确定这是否是最漂亮的方法,但是您可以在单词列表上使用地图。...
const words = ['word1', 'word2', 'word3']
let result = '+' + words.map(w => `(-${w}+`).join('').replace(/\+$/, '') + ''.padStart(words.length, ')')
console.log(result)
答案 1 :(得分:1)
您需要查找第一个结束括号并替换该值。
const insert = (s, v) => s ? s.replace(/(?=\))/, `+(-${v})`) : `+(-${v})`;
console.log(['word1', 'word2', 'word3'].reduce(insert, undefined));
答案 2 :(得分:1)
如果您可以将连续的输入存储到数组中,则Array.reduceRight()方法非常适合此问题:
const words = ['word1', 'word2', 'word3'];
let res = words.reduceRight((s, word) => `+(-${word}${s})`, "");
console.log(res);
.as-console {background-color:black !important; color:lime;}
.as-console-wrapper {max-height:100% !important; top:0;}
答案 3 :(得分:1)
嗯,但是您知道,普通的字符串连接确实非常聪明。
又快又脏,您需要做的只是将+(-
放在每个括号之间,并加上最后的括号。呵呵...
arr = ['word1', 'word2', 'word3' ];
console.log( '+(-' + arr.join('+(-') + ')'.repeat(arr.length) );
或者使用.map
arr = ['word1', 'word2', 'word3' ];
console.log(
arr.map( (e) => `+(-${e}` ) +
')'.repeat(arr.length)
);
答案 4 :(得分:0)
使用count变量存储要添加的单词数,然后将字符串切成仅剩下右括号的点。
插入新单词
添加剩余的字符串
var myString = '';
var count = 0
function someFunction()
{
...
count++;
var inputString = document.getElementById('my-input').value;
myString = myString.slice(0,0-count) + "+(" + "-" + inputString + ")" + myString.slice(0-count);
}