Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/467.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将字符串中的键替换为基于键的值–;对象中的值项_Javascript_String_Replace_Javascript Objects - Fatal编程技术网

Javascript 将字符串中的键替换为基于键的值–;对象中的值项

Javascript 将字符串中的键替换为基于键的值–;对象中的值项,javascript,string,replace,javascript-objects,Javascript,String,Replace,Javascript Objects,我正试图将字符串中的每个整数根据其键值项转换为对象中相应的值。例如,如果我有: var-arr={ “3”:“价值三”, “6”:“价值6”, “234”:“其他价值” }; var str=“我希望这里的值为3,这里的值为234”; 我希望输出为: new\u str=“我希望这里有三个值,这里有其他值” 我只是一时兴起,但这应该行得通 var new_str = str; for (var key in arr) { if (!arr.hasOwnProperty(key)) {

我正试图将字符串中的每个整数根据其键值项转换为对象中相应的值。例如,如果我有:

var-arr={
“3”:“价值三”,
“6”:“价值6”,
“234”:“其他价值”
};
var str=“我希望这里的值为3,这里的值为234”;
我希望输出为:

new\u str=“我希望这里有三个值,这里有其他值”

我只是一时兴起,但这应该行得通

var new_str = str;

for (var key in arr) {
    if (!arr.hasOwnProperty(key)) {
        continue;
    }

    new_str = new_str.replace(key, arr[key]);
}
如果希望替换所有出现的数字,则需要将正则表达式合并到混合中:

var new_str = str;

for (var key in arr) {
    if (!arr.hasOwnProperty(key)) {
        continue;
    }

    new_str = new_str.replace(new RegExp(key, "g"), arr[key]);
}
此外,我会选择另一个名称,而不是
arr
,因为这意味着它是一个数组,而它显然是一个对象。另外,由于原型泄漏和其他问题,请确保只对对象上的in循环使用
,而不是数组

您也可以使用jQuery实现这一点,但这可能有些过分:

var new_str = str;

$.each(arr, function (key, value) {
    new_str = new_str.replace(key, value);
});

在我看来,你也可以使用一个看起来更干净的减速器:

new_str = Object.keys(dynamicValues).reduce((prev, current) => {
  return prev.replace(new RegExp(current, 'g'), dynamicValues[current]);
}, value);

假设您有一个对象,如
arr
,定义了
str
,并声明了
new\u str
。然后,假设我们的目标是一个通用解决方案,则以下工作:

var arr={“3”:“值三”,“6”:“值六”,“234”:“其他值”};
var str=“我希望这里的值为3,这里的值为234”;
//构建类似`/3 | 6 | 234/g的正则表达式`
让re=newregexp(Object.keys(arr.join)(“|”),“g”);
//箭头函数近似等于
//类似于`函数(匹配){return arr[match];}的匿名函数`
new_str=str.replace(re,match=>arr[match]);

console.log(新的_str)
我最近需要用对象的
key:value
项替换字符串,其中一些键包含特殊字符,如花括号。因此,正如其他人所建议的那样,我们可以使用
字符串.replace
函数替换为通过函数作为替换值的RegExp,但是创建RegExp本身存在问题,因为我们需要用
\
转义其中的所有特殊字符。下面是转义函数和最终替换函数以及一个示例:

//在正则表达式中使用它的转义字符串
const regexpEscape=(string)=>string.replace(/[.*+\-?^${}()|[\]\\]/g,\\$&');
//将字符串替换为搜索对象的'key:value'项。
常量stringReplace=(字符串,搜索)=>{
const regexp=新regexp(
Object.keys(搜索)
.map((项)=>regexpEscape(项))
.join(“|”),
“g”
);
返回字符串.replace(regexp,(match)=>search[match]);
};
常量搜索={
{{name}}:“John”,
“{lastname}}”:“Doe”,
“{{age}}”:24岁,
};
const template='嘿,{{name}}{{lastname}}!你的年龄是{{age}};
log(stringReplace(模板,搜索))2021:

一定要小心

value 3
也匹配

value 32
const arr={'3':'value\u three','6':'value\u three','234':'other\u value'};
设str='我希望这里的值为3,这里的值为234';
Object.keys(arr.forEach)(key=>str=str.replaceAll(`value${key}`,arr[key]))

console.log(str)
使用
regex
,另一种解决方案可以如下所示:

const对象={
“3”:“价值三”,
“6”:“价值6”,
“234”:“其他价值”
};
const str=“我想要这里的值3,这里的值234.value 32”;
const replacedText1=str.replace(/value\d+/g,v=>object[v.split(“”[1]])| | v);
const replacedText2=str.replace(/\d+/g,v=>object[v]||v);
console.log(replacedText1);

console.log(replacedText2)很抱歉使用了变量名,我尝试使用一个简单的示例。当我尝试使用replace方法时,我仍然会遇到一个typeerror,我是否需要键入cast键或类似的东西?忘记这一点,我已经解决了。非常感谢您的帮助和及时回复。快速问一下,为什么jquery版本过于苛刻?因为jquery中没有任何东西可以帮助解决这个问题。非常好,但输出不完全正确。你有
value-value\u-three
而不仅仅是
value\u-three
,但我喜欢它。令人惊讶的是,它没有将
234
替换为
2value\u three4
将12更改为3,然后再次运行。其中只有一个有效-他想要
值3
,但我们也必须注意
值32