为什么下面的if语句排除了一个'It’s和其他的一样

Why is the following if statement excluding an array that's identical to the rest?

本文关键字:It 一样 其他 排除 语句 一个 为什么 if      更新时间:2023-09-26

我有以下数组:

[ '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语句会按顺序执行?

问题似乎是因为您在修改数组的同时仍在对其进行迭代。这意味着当您找到[ 'para', '"two"' ]项时,该项已不存在。

通常,在循环遍历集合时,应始终避免修改集合。如果需要进行更改,请在之前或之后进行更改(如果需要,也可以使用单独的循环)