使用javascript中key:value对数组中的值替换string中的键

时间:2012-06-26 01:13:15

标签: javascript jquery

我想知道是否有人可以帮助我使用一个简单的解决方案将javascript字符串中的每个整数转换为key:value pair数组中的相应键。例如,如果我有:

var arr = {'3':'value_three', '6':'value_six', '234':'other_value'};
var str = 'I want value 3 here and value 234 here';

我会将输出解释为:

new_str = 'I want value_three here and value other_value here'

很抱歉这是我的第一篇文章,所以我希望这是有道理的,我使用的是javascript和jquery(最新版本)。 任何帮助都会非常感激。

6 个答案:

答案 0 :(得分:5)

我只是做了这件事,但这应该有效。

var new_str = str;

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

    new_str = new_str.replace(key, arr[key]);
}

如果您想要替换所有出现的数字,您需要将Regex合并到混合中:

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以外的其他名称,因为这意味着当它显然是一个对象时它是一个数组。此外,请确保仅在对象上使用for-in循环,而不是阵列,因为原型泄漏问题和其他问题。

你也可以用jQuery做到这一点,但它可能有点过分:

var new_str = str;

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

答案 1 :(得分:2)

您还可以在这里使用一个看起来更干净的减速器:

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

答案 2 :(得分:2)

2021 年:

一定要注意

value 3

也匹配

value 32

const arr = {'3':'value_three', '6':'value_six', '234':'other_value'};
let str = 'I want value 3 here and value 234 here';

Object.keys(arr).forEach(key => str = str.replaceAll(`value ${key}`,arr[key]))
console.log(str)

答案 3 :(得分:1)

使用 regex,替代解决方案可能是这样的:

const object = {
    "3": "value_three",
    "6": "value_six",
    "234": "other_value"
};
const str = "I want value 3 here and value 234 here. 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);

答案 4 :(得分:0)

假设您有一个像arr这样的对象,其中定义了str并且声明了new_str。然后,假设我们的目标是一个通用的解决方案,则可以完成以下工作:

// Building a regex like `/3|6|234/g`
let re = new RegExp(Object.keys(arr).join('|'), 'g');

// Arrow function is approximately equivalent to
// an anonymous function like `function(match) { return arr[match]; }`
new_str = str.replace(re, match => arr[match]);

仅需注意一点,arr就您的示例而言是Object。 (我意识到它们有时也称为关联数组;只是指出来)。

答案 5 :(得分:0)

我最近需要用对象的 key: value 条目替换字符串,其中一些键包含特殊字符,例如大括号。因此,正如其他人所建议的,我们可以将 String.replace 函数与传递函数作为替换值的 RegExp 一起使用,但是创建 RegExp 本身存在问题,因为我们需要使用 { 转义其中的所有特殊字符{1}}。这是转义函数和最终替换函数的示例:

\

希望对大家有所帮助!保持安全:)