您的位置:首页技术文章
文章详情页

javascript - js数组处理时,总在头部多出一个空值

【字号: 日期:2023-04-07 10:57:24浏览:80作者:猪猪

问题描述

需求:

两个数组: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] = ’’; }

标签: JavaScript