JavaScript通过字符计数过滤值数组
这应该是一个快捷的方法,但我不明白为什么这一点JavaScript对我不起作用。目标是获取由空格分隔的单词组成的输入框字符串的值,将这些单词列为数组中的项目,并删除少于3个字符的单词:JavaScript通过字符计数过滤值数组,javascript,jquery,arrays,filter,Javascript,Jquery,Arrays,Filter,这应该是一个快捷的方法,但我不明白为什么这一点JavaScript对我不起作用。目标是获取由空格分隔的单词组成的输入框字符串的值,将这些单词列为数组中的项目,并删除少于3个字符的单词: var typed = $('input').val(); var query = typed.split(" "); var i=0; for (i=0; i<query.length; i++) { if (query[i].length < 3) { query.splice(i,1
var typed = $('input').val();
var query = typed.split(" ");
var i=0;
for (i=0; i<query.length; i++) {
if (query[i].length < 3) {
query.splice(i,1);
}
}
在输入框中运行onkeyup,它似乎可以工作,但只有大约50%的时间字符串(1和2个字符)偶尔会以某种方式进入数组。如果您有任何建议,我们将不胜感激。除了迭代问题之外,如果您键入多个空格,您可能还会看到意外的条目 试一试
这样,它将在任意数量的空格上拆分,而不是在每个空格上拆分。除了迭代问题之外,如果键入多个空格,还可能会看到意外的条目 试一试
这样,它将在任意数量的空格上拆分,而不是在每个空格上拆分。问题是,您在删除元素时正在进行迭代。考虑这个数组:
["he", "l", "lo world"]
最初,循环从索引0开始,并从数组中删除he。现在,新的阵列正在运行
["l", "lo world"]
在下一次迭代中,我将是1,您将检查lo world的长度,从而完全忽略l字符串
使用数组中的方法删除不需要的元素
var biggerWords = query.filter(function(word) {
return word.length >= 3;
});
问题是您在删除元素时正在进行迭代。考虑这个数组:
["he", "l", "lo world"]
最初,循环从索引0开始,并从数组中删除he。现在,新的阵列正在运行
["l", "lo world"]
在下一次迭代中,我将是1,您将检查lo world的长度,从而完全忽略l字符串
使用数组中的方法删除不需要的元素
var biggerWords = query.filter(function(word) {
return word.length >= 3;
});
问题是,您在向前计数时正在对数组进行切片。想想看……如果你从数组中取出一个索引点,从而将它缩短一个,增加i并继续移动到下一个,实际上移动的比你想要的更远,完全丢失了下一个索引。增量i-,从query.length-1开始,并使条件i>=0。有关此操作的示例,请在此处查看: CSS: HTML: Javascript:
问题是,您在向前计数时正在对数组进行切片。想想看……如果你从数组中取出一个索引点,从而将它缩短一个,增加i并继续移动到下一个,实际上移动的比你想要的更远,完全丢失了下一个索引。增量i-,从query.length-1开始,并使条件i>=0。有关此操作的示例,请在此处查看: CSS: HTML: Javascript:
嘿,我想你应该使用一个新的数组作为结果。因为您正在移除数组中的元素。长度改变了。这是我的解决办法
var typed = "dacda cdac cd k foorar";
var query = typed.split(" ");
var i=0;
var result = [];
for (i=0; i<query.length; i++) {
if (query[i].length >= 3) {
result.push(query[i]);
}
}
嘿,我想你应该使用一个新的数组作为结果。因为您正在移除数组中的元素。长度改变了。这是我的解决办法
var typed = "dacda cdac cd k foorar";
var query = typed.split(" ");
var i=0;
var result = [];
for (i=0; i<query.length; i++) {
if (query[i].length >= 3) {
result.push(query[i]);
}
}
试试这段代码,它可以去掉任何3个字符的单词,并确保没有创建空数组元素
typed.replace(/(\b)\w{1,3}\b/g,"$1");
var query = typed.split(/\s+/);
试试这段代码,它可以去掉任何3个字符的单词,并确保没有创建空数组元素
typed.replace(/(\b)\w{1,3}\b/g,"$1");
var query = typed.split(/\s+/);
是的,这很有效。或者从头开始构建一个新的数组,如下面的几个答案所示。感谢大家的快速反应。。。注意它的兼容性;是的,这很有效。或者从头开始构建一个新的数组,如下面的几个答案所示。感谢大家的快速反应。。。注意它的兼容性;