Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么下面的if语句排除了';这和其他的一样吗?_Javascript_Arrays_Regex - Fatal编程技术网

Javascript 为什么下面的if语句排除了';这和其他的一样吗?

Javascript 为什么下面的if语句排除了';这和其他的一样吗?,javascript,arrays,regex,Javascript,Arrays,Regex,我有以下数组: [ '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))

我有以下数组:

[ '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'})
      }
['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']
项已经不在了


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

问题似乎是因为您在对数组进行迭代时正在修改数组。这意味着,当您开始使用时,
['para','two']
项已经不在了


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

它会输出所有三个匹配项:@kamituel请查看我的编辑。我认为第二个if语句导致了问题。它确实输出了所有三个匹配项:@kamituel请查看我的编辑。我认为第二个if语句是问题的根源。他实际上并没有从
jsonml
数组中删除任何内容。但是他正在修改
hr
之后的行,这将删除带引号的字符串。@Barmar:是的,我看到了编辑。。。我会调整我的工作answer@musefan你能提供一个我如何解决这个问题的示例代码吗?@alexchenco:我可以,但你到底想发生什么?您正在更改该项,因此预期它不会输出。你想改变它吗?举一个你期望的完整最终结果的例子,他实际上没有从
jsonml
数组中删除任何内容。但是他正在修改
hr
之后的行,这将删除带引号的字符串。@Barmar:是的,我看到了编辑。。。我会调整我的工作answer@musefan你能提供一个我如何解决这个问题的示例代码吗?@alexchenco:我可以,但你到底想发生什么?您正在更改该项,因此预期它不会输出。你想改变它吗?给出一个你期望的最终结果的例子
"one"
undefined
{ class: 'noind' }
"three"