Javascript string.replace不能使用我的数组,我做错了什么?

时间:2016-10-12 13:01:15

标签: javascript arrays string replace

所以我有三个阵列:

  • str(包含我要替换的字符串)
  • 替换(包含要替换的字母)
  • by(包含新信件)

这是我的代码,它通过函数但返回相同的内容。目标是将“W”替换为“0”,将“B”替换为“1”,依此类推。我做错了什么?

function internalArtNrGenerator() {

    var str = new Array("5 1 1 1 0 W 1 1", "5 1 1 1 0 B 1 1", "5 1 1 1 0 K 1 1");
    var replace = new Array("W", "B", "K", "M", "A", "S", "N");
    var by = new Array("0", "1", "2", "3", "4", "5", "6");

    function str_replace(replace, by, str) {
        for (var i = 0; i < replace.length; i++) {
            str = str.replace(new RegExp(replace[i], "g"), by[i]);
        }
        return str;
    }

}

3 个答案:

答案 0 :(得分:1)

现在您正在定义函数str_replace,但您从未使用它。你在internalArtNrGenerator内,如果有人想要使用str_replace功能,那么这个功能就是#34;,但是没有任何东西可以使用它

阅读代码也看起来很困惑。使用函数的想法是您调用它并使用参数将数据发送到其中:

function addTwoNumbers(a, b) { return a + b; } // here, the parameters are a and b
addTwoNumbers(4, 2);

您正在使用变量名称strreplaceby,就好像它们会自动映射到具有相同名称的参数一样。那不是发生了什么。这些参数名称正是您在该函数中调用的值:

var x = 42; var a = []; var b = "something else";
var result = addTwoNumbers(x, 77); // does not at all touch the variables a and b above
// when addTwoNumbers is being run, a will be 42 (the value of x) and b will be 77
var secondResult = addTwoNumbers(8, 92);
// now when addTwoNumbers is being run, a will be 8 and b will be 92

答案 1 :(得分:0)

您必须在字符串上调用该方法才能使其正常工作。例如,您可以使用str映射str_replace数组以获取结果。请注意,它有点不清楚,因为str变量名称被重用。

function internalArtNrGenerator() {

    var str = new Array("5 1 1 1 0 W 1 1", "5 1 1 1 0 B 1 1", "5 1 1 1 0 K 1 1");
    var replace = new Array("W", "B", "K", "M", "A", "S", "N");
    var by = new Array("0", "1", "2", "3", "4", "5", "6");

    function str_replace(replace, by, str) {
        for (var i = 0; i < replace.length; i++) {
            str = str.replace(new RegExp(replace[i], "g"), by[i]);
        }
        return str;
    }
  
    // The .bind creates a new method with the first 2 arguments bound,
    // .map passes the last one: the actual string to perform the action on
    // and returns a new array
    return str.map(str_replace.bind(null, replace, by));
}

console.log(internalArtNrGenerator());

答案 2 :(得分:0)

检查此Plunkr: http://plnkr.co/edit/DYNk2kbjJfxGlEDZSnrT?p=preview

您需要调用该函数。 &安培;因为你的str是一个阵列&amp;不是一个字符串,迭代它&amp;将它传递给函数。 (有更好的迭代方法)。

function internalArtNrGenerator() {

    var str = new Array("5 1 1 1 0 W 1 1", "5 1 1 1 0 B 1 1", "5 1 1 1 0 K 1 1");
    var replace = new Array("W", "B", "K", "M", "A", "S", "N");
    var by = new Array("0", "1", "2", "3", "4", "5", "6");

    function str_replace(replace, by, str) {
        for (var i = 0; i < replace.length; i++) {
            str = str.replace(new RegExp(replace[i], "g"), by[i]);
        }
        return str;
    }

   for(var x in str)
   {
   str[x] = str_replace(replace,by,str[x]);
   console.log('inside');
   console.log(str[x]);
   }
   return str;
}

var x = internalArtNrGenerator();
console.log('final');
console.log(x);
alert(x);