配列内の複数の文字列から、ある種の自作変数を置き換えようとしています。後で、ユーザーに置換を要求するプロンプトを作成しますが、最初のステップでは、それを「test」値(「###」)に置き換えようとしています。
ああ、私はそれを単純化したいと思っています(連鎖関数を使用して-私は自分自身のために発見したばかりであり、それがここでの問題です:D)。誰か助けてくれませんか?
私がこれまでに得たもの:
const replaceAll = (obj) => {
obj.cmds.forEach((element, index, array) => {
obj.cmds[index] = obj.cmds[index].match(/{.*?}/gmi).map((value) => {
console.log('valuex', value)
/*
// Here the user should be asked for the replacement in the future.
// const newValue = userPromp(value)
*/
return obj.cmds[index].split(value).join('###')
})
})
return obj
}
const newObj = replaceAll({
name: 'ULTRA TEST',
cmds: [
'port {port}',
'port {port} und random {random}',
'random {random} und value {value}'
]
})
console.log(newObj)
あなたが探しているのは次のようなものだと思います。matchを使用する代わりに、Replaceを使用して正規表現を渡すだけであることがわかります。
replaceAll = (obj) => {
var m = {};
obj.cmds.forEach((element, index, array) => {
obj.cmds[index].match(/{.*?}/gmi).map( value => {
var r = m[value]
if (!r) { /* Create Prompt here. */ r = Math.random() * 10 }
m[value] = r;
})
Object.keys(m).map( key => {
obj.cmds[index] = obj.cmds[index].replace(key, m[key])
});
})
return obj
}
newObj = replaceAll({
name: 'ULTRA TEST',
cmds: [
'port {port}',
'port {port} und random {random}',
'random {random} und value {value}'
]
})
newObjによって返されるjsonは次のとおりです。
{
"name":"ULTRA TEST",
"cmds":[
"port 1",
"port 1 und random 2",
"random 2 und value 3"
]
}
したがって、replaceAllの反復で以前に要求されなかった値の入力のみをユーザーに要求するということが起こります。
これはまさにあなたが望むことをするでしょう。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加