Javascript 返回筛选数组的长度
我有一个if语句,它只返回与用户输入相对应的数组结果。换句话说,数组的搜索栏Javascript 返回筛选数组的长度,javascript,arrays,Javascript,Arrays,我有一个if语句,它只返回与用户输入相对应的数组结果。换句话说,数组的搜索栏 var filter = userInput.value.toUpperCase(); for (var i = 0; i < myArrayElements.length; i++) { if (myArrayElements.toUpperCase().indexOf(filter) != -1) { myArrayElements[i].style.display = 'list-
var filter = userInput.value.toUpperCase();
for (var i = 0; i < myArrayElements.length; i++) {
if (myArrayElements.toUpperCase().indexOf(filter) != -1) {
myArrayElements[i].style.display = 'list-item';
} else {
myArrayElements[i].style.display = 'none';
}
}
及
但是也没有成功:控制台返回一个错误
编辑:Nina Scholz answer正确返回数组的长度,给出的示例非常棒,但是其他带有.filter()的答案非常值得考虑,感谢大家 您可以使用变量进行计数
var filter = userInput.value.toUpperCase(),
count = 0;
for (var i = 0; i < myArrayElements.length; i++) {
if (myArrayElements[i].toUpperCase().indexOf(filter) != -1) {
// ^^^^^^^^^^^^^^^ only if that is really a string!!!
myArrayElements[i].style.display = 'list-item';
count++;
} else {
myArrayElements[i].style.display = 'none';
}
}
var filter=userInput.value.toUpperCase(),
计数=0;
对于(变量i=0;i
工作示例:
函数find(){
var filter=document.getElementById('search').value.toUpperCase(),
计数=0,
myArrayElements=document.getElementsByTagName('li');
对于(变量i=0;i
查找
- 试验
- 测试用例
- 42
- 试验
您可以使用变量进行计数
var filter = userInput.value.toUpperCase(),
count = 0;
for (var i = 0; i < myArrayElements.length; i++) {
if (myArrayElements[i].toUpperCase().indexOf(filter) != -1) {
// ^^^^^^^^^^^^^^^ only if that is really a string!!!
myArrayElements[i].style.display = 'list-item';
count++;
} else {
myArrayElements[i].style.display = 'none';
}
}
var filter=userInput.value.toUpperCase(),
计数=0;
对于(变量i=0;i
工作示例:
函数find(){
var filter=document.getElementById('search').value.toUpperCase(),
计数=0,
myArrayElements=document.getElementsByTagName('li');
对于(变量i=0;i
查找
- 试验
- 测试用例
- 42
- 试验
您可以使用
filter()方法使用通过的所有元素创建一个新数组
由提供的函数实现的测试
有人指出(我自己也看到了这一点,但在回答问题时还是回答了),这没有考虑到循环中的逻辑。这可以通过将myArrayElements
中的所有元素设置为display:none来解决代码>作为默认值,然后使用:
var newArray.forEach(function(value, index, array) {
value.style.display = 'list-item';
});
或者,您也可以从关闭按钮使用forEach()
:
var filter = userInput.value.toUpperCase(),
count = 0;
myArrayElements.forEach(function(value, index, array) {
(value.toUpperCase() === filter) ? value.style.display = 'list-item' : value.style.display = 'none';
count ++;
});
你可以使用
filter()方法使用通过的所有元素创建一个新数组
由提供的函数实现的测试
有人指出(我自己也看到了这一点,但在回答问题时还是回答了),这没有考虑到循环中的逻辑。这可以通过将myArrayElements
中的所有元素设置为display:none来解决代码>作为默认值,然后使用:
var newArray.forEach(function(value, index, array) {
value.style.display = 'list-item';
});
或者,您也可以从关闭按钮使用forEach()
:
var filter = userInput.value.toUpperCase(),
count = 0;
myArrayElements.forEach(function(value, index, array) {
(value.toUpperCase() === filter) ? value.style.display = 'list-item' : value.style.display = 'none';
count ++;
});
您可以使用.filter()
函数执行样式更改,并一次性获得过滤后的数组
var filter = userInput.value.toUpperCase(),
filterFunc = function(element) {
if (element === filter) {
element.style.display = 'list-item';
return true;
}
else {
element.style.display = 'none';
return false;
}
}
var filteredLength = myArrayElements.filter(filterFunc).length;
您可以使用.filter()
函数执行样式更改,并一次性获得过滤后的数组
var filter = userInput.value.toUpperCase(),
filterFunc = function(element) {
if (element === filter) {
element.style.display = 'list-item';
return true;
}
else {
element.style.display = 'none';
return false;
}
}
var filteredLength = myArrayElements.filter(filterFunc).length;
过滤数组在哪里?错误是什么?if语句没有返回任何内容。myArrayElements[i]
的长度并不重要,因为它是对数组中某个内容的引用,而不是对数组的引用。顺便说一句,您不是在筛选某个内容,而是在迭代和分配。tryconsole.log(myArrayElements.length)代码>过滤数组在哪里?错误是什么?if语句没有返回任何内容。myArrayElements[i]
的长度并不重要,因为它是对数组中某个内容的引用,而不是对数组的引用。顺便说一句,您不是在筛选某个内容,而是在迭代和分配。tryconsole.log(myArrayElements.length)代码>OP发布的代码在if和else条件内执行某些操作。因此,即使记录与输入不匹配,代码也需要执行某些操作……是的,但是您可以将myArrayElements
中的所有元素设置为none样式,然后将newArray
中的元素设置为其他样式。回答问题。另外,向大家介绍不同的处理方法也是很好的。OP发布的代码在if和else条件中做了一些事情。因此,即使记录与输入不匹配,代码也需要执行某些操作……是的,但是您可以将myArrayElements
中的所有元素设置为none样式,然后将newArray
中的元素设置为其他样式。回答问题。另外,引入不同的方法来做事情也是很好的。虽然这从技术上回答了OP的问题,但出于一些原因,这仍然是无效的代码。1) 阵列原型没有toUpperCase
方法。2) 使用字符串过滤看似dom节点的内容将不起作用(如果不先从dom节点提取文本)@Damon我认为,考虑到OP提出的问题,filter
可以等于数组中的一个元素,这是一个公平的假设。如果OP在filter
上使用字符串方法,我不会这样假设,并且。。。同样的方法