所以我有三个阵列:
这是我的代码,它通过函数但返回相同的内容。目标是将“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;
}
}
答案 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);
您正在使用变量名称str
,replace
和by
,就好像它们会自动映射到具有相同名称的参数一样。那不是发生了什么。这些参数名称正是您在该函数中调用的值:
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);