将数组值替换为 Javascript 中新定义的值
Replace array values with new defined values in Javascript
//Get message from textarea
var msg = $('#mytextarea').val();
//Convert string to array of letters
// eg. cata = ['c','a','t','a']
var msgLettersAsArray = msg.split('');
我现在需要做的是替换单个字母,像这样
c = b;
a = e;
t = c;
a = e;
//array neeeds to be converted from this:
var array = ['c','a','t','a'];
// to this:
var array = ['b','e','c','e'];
有什么办法可以做到这一点吗?我需要做的就是用我选择的字母替换数组中已有的字母
这很简单,只需定义一个翻译映射并使用Array.prototype.map
.
var translationMap = {
c: 'b',
a: 'e',
t: 'c'
};
//returns ['b','e','c','e']
['c','a','t','a'].map(function (letter) { return translationMap[letter] || letter; });
编辑:看来您实际上只是想替换字符串中的字母,在这种情况下@phylax答案是正确的。无需使用数组进行简单的字符串替换。
function replaceChars(str, map) {
var i, reg = "";
for (i in map)
reg += i;
return str.replace(
new RegExp("["+reg.replace(/(']|-|'')/,"''$1")+"]",'g'),
function(char) { return map[char]; }
);
}
//Get message from textarea
var msg = $('#mytextarea').val(); // "cata"
replaceChars(msg, {c:'b', a:'e', t:'c', a:'e'}); // "bece"
只是从我的评论中给出答案:
就像OP说的,没有split()
就可以了。并且只需一次调用String.replace()
就可以做到:
var map = {
c: 'b',
a: 'e',
t: 'c'
};
msg.replace(/[a-z0-9]/g, function (i) { return map[i] || i; })
正则表达式可以使事件更简单:
msg.replace(/./g, function (i) { return map[i] || i; })
当然,只需使用 for
循环:
var array = ['c','a','t','a'];
for (var i = 0; i < array.length; i++)
{
var cur = array[i];
if (cur == 'c') {
array[i] = 'b';
} else if (cur == 'a') {
array[i] = 't';
} else if (cur == 't') {
array[i] = 'c';
}
}
但是使用对象来存储这些映射可以使代码更加紧凑:
var array = ['c','a','t','a'];
var transform = { 'c': 'b', 'a': 'e', 't': 'c' };
for (var i = 0; i < array.length; i++)
{
array[i] = transform[array[i]];
}
未经过测试,但它应该可以工作
var replaxe = {
'c':'b',
'e':'d'
},
array = ['c','e'],
result = [];
for(var item in array){
result.push(replaxe[item]);
}
console.log(result);
RUN THIS IN YOUR FIRE BUG CONSOLE
var array = ['c','a','t','a'];
var myarray = [];
for(i=0; i<=array.length; i++)
{
if(array[i] == 'c' )
{
array[i] = 'b'
}
if(array[i] == 'a' )
{
array[i] = 'e'
}
if(array[i] == 't' )
{
array[i] = 'c'
}
if(array[i] == 'a' )
{
array[i] = 'a'
}
}
console.log(myarray);
我建议对数组中的每个元素使用开关大小写。
for (i in array) {
switch (array[i]) {
case "c":
array[i] = "b";
break;
case "a":
array[i] = "e";
break;
case "t":
array[i] = "c";
break;
}
}
相关文章:
- 为什么JavaScript抛出'未捕获的ReferenceError:var未定义'定义var时
- 在JavaScript中定义自定义对象和函数(第2部分)
- 在JavaScript中定义自定义对象和函数
- 为html标记定义自定义css样式
- 未定义===未定义比较什么
- 在这段代码中:为什么e被定义在定义e的括号中
- 为什么Inspect元素中的错误显示函数myNUM()没有定义?如何定义函数
- 定义自定义JavaScript异常的较短方法
- 扩展或定义新的dat.gui属性控制器的最佳方法
- 在javascript中“定义”和定义有什么区别
- grunt-usemin:定义自定义流
- 用于定义自定义服务的语法
- 在navigator对象中定义新的mimetype
- 在 JavaScript 中由装饰器重新定义后的原始函数值
- 如何使用变量来定义新的google.maps.LatLng()
- Facebook图形api和新定义的对象和动作:消息:"未知路径组件"
- 由于构造函数在另一个函数中,所以没有定义新对象
- 在定义新的字符串方法时使用reduce()
- 将数组值替换为 Javascript 中新定义的值
- 如何在Firefox中隐藏自定义新标签URL