javascript - js數組處理時,總在頭部多出一個空值
問題描述
需求:兩個數組:textArr 和 valueArr,組合這兩個數組,形成如:1^Q1的字符串。中間用n隔開。(準備將其傳入textarea中)
實際問題:每次都在字符串頭部多增加了一個空行,代碼很短,居然就是找不出來,讓人氣結。請大家幫忙看看。謝謝!
choicesToString () {let textArr = [’Q1’, ’Q2’, ’Q3’];let valueArr = [1, 2, 3];let choiceArr = []for (let i = 0; i < textArr.length; i++) { if (isNull(valueArr[i])) { valueArr[i] = ’’ } if (isNull(choiceArr[i])) { choiceArr[i] = ’’ } if ((valueArr[i] === ’’) && (choiceArr[i] === ’’)) { continue } choiceArr.push(valueArr[i] + ’^’ + textArr[i]) console.log(`${i}: ${choiceArr}`)}// TODO: BUG! Add an empty cell at the first position. FUCK!!!// 難道要我被迫加上這段可恥的代碼...// choiceArr.splice(0, 1)console.log(choiceArr)return choiceArr.toString().split(’,’).join(’n’) } isNull (arg) { return !arg && arg !== 0 && typeof arg !== ’boolean’ ? true : false }
問題解答
回答1:你把 valueArr 的幾個判斷都寫成了 choiceArr 了
回答2:for循環當i等于0的時候,看這句
if (isNull(choiceArr[i])) { choiceArr[i] = ’’ }
此時choiceArr是[],choiceArr[i]即choiceArr[0],為undefined,isNull會返回true,所以會執行choiceArr[i] = ’’,此時數組的長度已經變成了1,然后執行下面的push之后,此時choiceArr的值為['', '1^Q1'],所以for循環第一遍結束以后,choiceArr的長度不是1而是2。
當i等于1時,因為choiceArr[1]的值是'1^Q1',所以
if (isNull(choiceArr[i])) { choiceArr[i] = ’’ }
的判斷為false,然后執行下面的push語句,此時choiceArr的值為['', '1^Q1', '2^Q2'];當i等于2時,同i=1的情況,循環結束之后choiceArr為['', '1^Q1', '2^Q2', '3^Q3']。
綜上,空值''是在i=0時產生的。
回答3:如樓上所說,你的那句if (isNull(choiceArr[i])) { choiceArr[i] = ’’ }非常奇怪, 非要這么寫的話,就加個判斷把。
if (choiceArr.length > 0 && isNull(choiceArr[i])) { choiceArr[i] = ’’; }
