我正试图在JavaScript中动态创建另一个数组。 我有一个字符串,这是一个像'2a + 3b + 4a + 5c'这样的数学文字表达式:我只想把它拆分成一个只有数字的字面部分的数组(例如'a,b,a,c “)。
我尝试使用以下代码执行此操作:
var expression = '2a + 3b + 4a + 5c';
var NumbersArray = expression.split(' + '); /* NumbersArray = 2a,3b,4a,5c */
alert('So far it's working!');
var LettersArray = new Array();
for (var i = 0; i < NumbersArray.length; i++) {
eval('var LettersArray[' + i + '] = NumbersArray[' + i + '].replace(/[0-9]/g,"");');
alert(eval('LettersArray[' + i + ']'));
}
但它不起作用! 我该如何解决?
答案 0 :(得分:5)
这里有很多错误,试图评论我的所有修复:
var expression = '2a + 3b + 4a + 5c';
var NumbersArray = expression.split(' + '); /* NumbersArray = 2a,3b,4a,5c */
//using single quotes inside single quotes doesn't work without escaping, try double quotes instead
alert("So far it's working!");
//use array literals [], not new Array() unless you need it
var LettersArray = [];
for (var i = 0; i < NumbersArray.length; i++) {
//why is eval used here? and why are you using var to re-declare LettersArray?
//eval('var LettersArray[' + i + '] = NumbersArray[' + i + '].replace(/[0-9]/g,"");');
//alert(eval('LettersArray[' + i + ']'));
//no need for eval, just access array indexes
LettersArray[i] = NumbersArray[i].replace(/[0-9]/g, '');
alert(LettersArray[i]);
}
工作示例:http://jsfiddle.net/FERj5/
实现同样目标的更快捷方法是:
var expression = '2a + 3b + 4a + 5c';
var letters = expression.replace(/\d+/g, '').split(' + ');
//now letters == ['a', 'b', 'a', 'c']
答案 1 :(得分:1)
警报中的字符串中断。它应该是
alert("So far it's working!");
也在循环中的eval同样存在问题
此代码有效
var expression = '2a + 3b + 4a + 5c';
var NumbersArray = expression.split(' + '); /* NumbersArray = 2a,3b,4a,5c */
var LettersArray = [];
var evalit;
for (var i = 0; i < NumbersArray.length; i++) {
evalit = "LettersArray[" + i + "] = NumbersArray[" + i + "].replace(/[0-9]/g,'');";
eval(evalit);
alert(LettersArray[i]);
}
这是一个demo fiddle
也尝试在不需要它的地方避免使用eval
。
答案 2 :(得分:1)
如果它只是从'2a + 3b + 4a + 5c'
到'a, b, a, c'
的数组,你可以缩短它:
var expression = '2a + 3b + 4a + 5c';
expression.replace(/(\d+|\s+)/gi,'').split('+');
答案 3 :(得分:0)
不确定您使用eval的原因。试试这个:
var expression = '2a + 3b + 4a + 5c';
var NumbersArray = expression.split(' + '); /* NumbersArray = 2a,3b,4a,5c */
var LettersArray = new Array();
for (var i = 0; i < NumbersArray.length; i++) {
LettersArray[i] = NumbersArray[i].replace(/[0-9]/g,"");;
alert(LettersArray[i]);
}
答案 4 :(得分:0)
这需要多么灵活?如果你的模式总是[number][letter] + [number][letter] + [number][letter] + [number][letter] + ....
,那么你可以真正基本:
var expression = '2a + 3b + 4a + 5c';
var NumbersArray = expression.split(' + '); /* NumbersArray = 2a,3b,4a,5c */
var LettersArray = expression.match(/[a-z]/g); /* LettersArray = a,b,a,c */
为了获得更大的灵活性,您需要做的就是更改正则表达式模式:
/[a-z]/g
至/[a-z]+/g
。/[a-z]/g
更改为/[a-z]+/gi
。