我有以下数组:
[ 'markdown',
[ 'para', '"one"' ],
[ 'hr' ],
[ 'para', '"two"' ],
[ 'para', '"three"' ] ]
我做了一个循环,只匹配那些带双引号的数组:
for (i = 1; i < jsonml.length; i++) {
if (typeof jsonml[i][1] === "string" && jsonml[i][1].match(/"/g)) {
var p = jsonml[i]
console.log(p)
}
// more code
if (jsonml[i][0] === 'hr') {
var hr = jsonml[i]
var p = jsonml[i + 1]
hr.splice(0, 1, 'para', '* * *')
p.splice(1, 0, {'class': 'noind'})
}
出于某种原因,console.log(p)
仅输出:
[ 'para', '"one"' ]
[ 'para', '"three"' ]
[ 'hr' ]
是否会使[ 'para', '"two"' ]
与if语句不匹配?如果是这样,如何修复它以便[ 'para', '"two"' ]
匹配?
if (jsonml[i][0] === 'hr') {
var hr = jsonml[i]
var p = jsonml[i + 1]
hr.splice(0, 1, 'para', '* * *')
p.splice(1, 0, {'class': 'noind'})
}
修改
我认为问题在于下面的if语句,因为console.log(jsonml[i][1])
输出:
"one"
undefined
{ class: 'noind' }
"three"
我认为if语句会按顺序执行吗?
答案 0 :(得分:4)
问题似乎是因为您在迭代时修改数组。这意味着当你到达它时,[ 'para', '"two"' ]
项目不再存在。
通常,在循环时,应始终避免修改集合。如果您需要进行更改,请在之前或之后进行更改(如果需要,也可以使用单独的循环)