Javascript D';“我不理解这一结果”;至于;循环(重新编辑)
我想做一个小程序,从数组中删除一些不需要的字符,如“/n”、““/t”,问题是它部分工作。我看到该程序删除了我想要的一些字符,但不是所有索引(例如:第三个et第五个): 该方案: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
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因为我们应该让for的处理迭代器
- 使用
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++)
和notfor(const i=0;i<50;i++)
。我已经用自己的阵列数据测试了它的工作性能。如果循环不适用,请在循环之前检查caractereinside
的值。如果数据正确,它必须在标准范围内工作ContentNueSpace菜单不是一个数组,而是一堆文本。这个答案有几个问题。1) 第一个代码块遍历caractereinside
,并使用splice
删除不需要的元素。问题是splice
会移动阵列<应调整代码>i
以适应此更改。这意味着您应该在splice
ing之后减小i
。否则,将永远不会检查移动到拆下元件位置的元件。2) 第二个代码块使caractereinside
数组保留空插槽,这可能不是所需的。