两个数组: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
}
曾经蜡笔没有小新2017-07-05 10:41:37
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
时产生的。
天蓬老师2017-07-05 10:41:37
如楼上所说,你的那句if (isNull(choiceArr[i])) { choiceArr[i] = '' }
非常奇怪, 非要这么写的话,就加个判断把。
if (choiceArr.length > 0 && isNull(choiceArr[i])) { choiceArr[i] = ''; }