簡體   English   中英

JavaScript:動態創建數組

[英]JavaScript: Dynamically create array

我正在嘗試從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 + ']'));
}

但這不起作用! 我該如何解決?

這里有很多錯誤,試圖評論我所有的修復:

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']

警報中的字符串會中斷。 它應該是

 alert("So far it's working!");

在循環中也同樣存在同樣的問題

此代碼有效

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]);
}

這是一個演示小提琴

還要嘗試避免在您不需要的地方進行eval

如果僅將數組從'2a + 3b + 4a + 5c''a, b, a, c' ,則可以使其更短:

var expression = '2a + 3b + 4a + 5c';
expression.replace(/(\d+|\s+)/gi,'').split('+');

不知道為什么要使用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]);
}

這需要多靈活? 如果您的模式始終是[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 */

為了獲得更多的靈活性,您需要做的就是稍微改變一下regex模式:

  • 如果需要考慮多字母變量,則可以將/[az]/g更改為/[az]+/g
  • 如果需要考慮大寫變量,則可以將/[az]/g更改為/[az]+/gi

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM