javascript - js數(shù)組處理時(shí),總在頭部多出一個(gè)空值
問(wèn)題描述
需求:兩個(gè)數(shù)組:textArr 和 valueArr,組合這兩個(gè)數(shù)組,形成如:1^Q1的字符串。中間用n隔開(kāi)。(準(zhǔn)備將其傳入textarea中)
實(shí)際問(wèn)題:每次都在字符串頭部多增加了一個(gè)空行,代碼很短,居然就是找不出來(lái),讓人氣結(jié)。請(qǐng)大家?guī)兔纯础Vx謝!
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 }
問(wèn)題解答
回答1:你把 valueArr 的幾個(gè)判斷都寫(xiě)成了 choiceArr 了
回答2:for循環(huán)當(dāng)i等于0的時(shí)候,看這句
if (isNull(choiceArr[i])) { choiceArr[i] = ’’ }
此時(shí)choiceArr是[],choiceArr[i]即choiceArr[0],為undefined,isNull會(huì)返回true,所以會(huì)執(zhí)行choiceArr[i] = ’’,此時(shí)數(shù)組的長(zhǎng)度已經(jīng)變成了1,然后執(zhí)行下面的push之后,此時(shí)choiceArr的值為['', '1^Q1'],所以for循環(huán)第一遍結(jié)束以后,choiceArr的長(zhǎng)度不是1而是2。
當(dāng)i等于1時(shí),因?yàn)閏hoiceArr[1]的值是'1^Q1',所以
if (isNull(choiceArr[i])) { choiceArr[i] = ’’ }
的判斷為false,然后執(zhí)行下面的push語(yǔ)句,此時(shí)choiceArr的值為['', '1^Q1', '2^Q2'];當(dāng)i等于2時(shí),同i=1的情況,循環(huán)結(jié)束之后choiceArr為['', '1^Q1', '2^Q2', '3^Q3']。
綜上,空值''是在i=0時(shí)產(chǎn)生的。
回答3:如樓上所說(shuō),你的那句if (isNull(choiceArr[i])) { choiceArr[i] = ’’ }非常奇怪, 非要這么寫(xiě)的話,就加個(gè)判斷把。
if (choiceArr.length > 0 && isNull(choiceArr[i])) { choiceArr[i] = ’’; }

網(wǎng)公網(wǎng)安備