Javascript 返回筛选数组的长度

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-

我有一个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-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]
的长度并不重要,因为它是对数组中某个内容的引用,而不是对数组的引用。顺便说一句,您不是在筛选某个内容,而是在迭代和分配。try
console.log(myArrayElements.length)过滤数组在哪里?错误是什么?if语句没有返回任何内容。
myArrayElements[i]
的长度并不重要,因为它是对数组中某个内容的引用,而不是对数组的引用。顺便说一句,您不是在筛选某个内容,而是在迭代和分配。try
console.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
上使用字符串方法,我不会这样假设,并且。。。同样的方法