Javascript 过滤器功能 - 试图正确理解它

标签 javascript

我需要一些帮助来阐明我应该如何使用过滤器。

以下工作正常:

let nums = [10, 12, 15, 20]
nums.filter(num => num > 14)

结果 = [15, 20]

如果我理解正确,我将传入一个以 num 作为参数的函数。

这就是一切变得困惑的地方(请记住,我不是高级 js 程序员)

我有一个html元素数组

let fields = document.getElementsByClassName("f-field")

返回数组中的每个元素都包含一堆其他 html 元素,它看起来像这样。

<div class="f-field">
     <textarea id="9008" name="Logo"></textarea>
</div>

内部 HTML 可以是文本区域、选择、输入等等......

我试过了,上面写着

“fields.filter 不是函数”

fields.filter(field => field.getElementsByName("Logo"))

我假设过滤器不适用于 html 元素数组。还是我做错了?

提前致谢,我正在尝试真正理解 javascript

最佳答案

DOM 查询方法,如 getElementsByClassNamequerySelector返回类似于数组实际上数组的集合(HTMLCollectionNodeList)。它们具有可以迭代的编号键和长度属性,但不支持像 filter 这样的数组泛型。 , forEachmap .

您可以使用 array = Array.from(source) 将类似数组的对象转换为数组.如果您正在编写 ES6,您还可以使用扩展运算符:array = [...source]

因此,您可以编写如下代码:

let fields = document.querySelectorAll('.f-field');
logos = Array.from(fields).filter(field => field.getElementsByName('logo'));

话又说回来,当你可以直接将 CSS 选择器传递给 querySelectorAll 时,为什么还要进行所有过滤和遍历? ?例如

let logos = Array.from(document.querySelectorAll('.f-field [name="logo"]'));

关于Javascript 过滤器功能 - 试图正确理解它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43374522/

相关文章:

javascript - 在 html5 本地存储中存储音频文件 - 使用 javascript 下载音频文件

javascript - 函数引用在js中是如何工作的?

javascript - 选中/取消选中复选框时如何隐藏/显示表单的一部分?

javascript - 将第二个服务注入(inject) Controller AngularJS 时遇到错误

javascript - 以空格分隔的样式字符串

javascript - 如何在菜单按钮上运行不同文档中的功能

javascript - 语法高亮自动加载器

javascript - 如何将所有图层 Canvas 居中?

javascript - 将CSS添加到占位符的部分

javascript - 使用 javascript 聚焦字段时显示 Android 软键盘