Javascript D';“我不理解这一结果”;至于;循环(重新编辑)

Javascript D';“我不理解这一结果”;至于;循环(重新编辑),javascript,jquery,for-loop,indices,Javascript,Jquery,For Loop,Indices,我想做一个小程序,从数组中删除一些不需要的字符,如“/n”、““/t”,问题是它部分工作。我看到该程序删除了我想要的一些字符,但不是所有索引(例如:第三个et第五个): 该方案: var contennuespacemenu=$('.Espace Menu').children('div').html()//包含要删除的字符的数组。 变量bannedCharactere=[“\n”,“\t”]; 变量caractereinside=[]; 对于(变量i=0;i

我想做一个小程序,从数组中删除一些不需要的字符,如“/n”、““/t”,问题是它部分工作。我看到该程序删除了我想要的一些字符,但不是所有索引(例如:第三个et第五个):

该方案:

var contennuespacemenu=$('.Espace Menu').children('div').html()//包含要删除的字符的数组。
变量bannedCharactere=[“\n”,“\t”];
变量caractereinside=[];
对于(变量i=0;i<50;i++){
对于(变量j=0;j<(bannedCharacter.length);j++){
设test=contentuespacemenu[i]==bannedCharactere[j];
如果(测试){
i=i+1;
}否则{
caractereinside[i]=上下文空间菜单[i];
}
}
}

控制台日志(caractereinside)不确定为什么要使用2个循环,但我已通过更改以下内容将上一个示例更改为工作状态:

  • 将硬编码的
    50
    更改为
    contentuespacemenu.length
  • 我将使用
    ,而不是关闭第二个循环/
    测试
    !BannedCharactere.includes(ContenueSpace菜单[i])
    检查当前字符是否有效
  • 删除
    i=i+1处理迭代器
  • 使用
    push()
var contentuespacemenu=[“1”、“2”、“3”、“4”、“5”、“6”、“7”、“8”、“1”、“2”、“3”];
变量bannedCharactere=[“1”、“2”、“3”、“4”];
变量caractereinside=[];
//从bannedCars中删除所有
对于(变量i=0;i如果
contenuespace菜单
是数组,请尝试使用:
const contennuespacemenu=$('.Espace Menu').children('div').html()//包含要删除的字符的数组。
常量bannedCharactere=[“\n”、“\t”];
const-caractereinside=contenuespacemenu.slice(0,contenuespacemenu.length);//我复制表格,以免以后修改
for(设i=0;i<50;i++){
let test=bannedCharactere.includes(caractereinside[i]);
如果(测试){
caractereinside.拼接(i,1);
} 
}
//如果要迭代整个数组,则50必须是characterinside数组的长度
控制台日志(caractereinside);
否则,如果
contentuespacemenu
大量文本,请尝试:
const contennuespacemenu=$('.Espace Menu').children('div').html()//包含要删除的字符的数组。
常量bannedCharactere=[“\n”、“\t”];
常数caractereinside=[];
对于(常数i=0;i<50;i++){
caractereinside[i]=上下文空间菜单[i];
let test=bannedCharactere.includes(caractereinside[i]);
如果(测试){
caractereinside.拼接(i,1);
}
}
//如果要迭代整个ContentUspace菜单,则50必须是characterinside数组的长度
控制台日志(caractereinside);

听起来像是太复杂了。我想,为什么不这样做呢?首先,您的
contentuespacemenu
不是数组,jQuery的
.html()
返回一个字符串。第二,为什么
i
从0运行到50,为什么不首先考虑
contenuespacemenu
的实际长度呢?这可以用一个带一点正则表达式的单行程序来完成……你通过手动递增
i
来打破循环计数器。你的问题中没有Jquery:。
bannedcaractere
可以是
Set
OEP,谢谢你注意到@3limin4t0r@anthonygarcialabiad,好的,但我在帖子中说它对这种包含“1”、“2”的字符串有效。。。但它不适合“/n”和“/t”字符,不知道why@3limin4t0r,是的,我注意到,我不认为您的代码在任何给定的情况下都能工作。请尝试上面的示例,如果您缺少任何内容,请告诉我们。我尝试了您的修改,但无效,向我显示以下消息:未捕获类型错误:caractereinside.splice不是函数。请在for循环之前打印caractereinside值。因为
Uncaught TypeError:caractereinside.splice
意味着不定义或它不是一个数组,或者错误可以从到必须具有的for循环
for(让i=0;i<50;i++)
和not
for(const i=0;i<50;i++)
。我已经用自己的阵列数据测试了它的工作性能。如果循环不适用,请在循环之前检查
caractereinside
的值。如果数据正确,它必须在标准范围内工作ContentNueSpace菜单不是一个数组,而是一堆文本。这个答案有几个问题。1) 第一个代码块遍历
caractereinside
,并使用
splice
删除不需要的元素。问题是
splice
会移动阵列<应调整代码>i
以适应此更改。这意味着您应该在
splice
ing之后减小
i
。否则,将永远不会检查移动到拆下元件位置的元件。2) 第二个代码块使
caractereinside
数组保留空插槽,这可能不是所需的。