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"