我正在尝试学习JavaScript。我遇到以下声明:
hero.powers = [...form.powers].filter(box => box.checked).map(box => box.value);
我想知道“框”显然是指HTML页面中的复选框:
这是如何工作的?
答案 0 :(得分:2)
要了解这一点,我们可以将其分解:
[...form.powers]
...
)从form.powers
(DOM元素的集合)创建一个数组,在这种情况下,它将是复选框DOM元素的数组。 .filter(box => box.checked)
true
回调(箭头函数)中返回.filter
时,我们在告诉它将元素保留在数组中。这里的box
是指数组中给定的元素(当我们遍历/迭代数组时,box
从一个元素到另一个元素,或者更确切地说,从复选框到复选框)。 / li>
.map(box => box.value);
value
。在.map
中,将当前迭代的项目更改为其回调返回的内容。同样,在这种情况下,box
代表当前迭代的项目,它是我们过滤后的复选框数组中的一个复选框。 总的来说:
hero.powers = [...form.powers].filter(box => box.checked).map(box => box.value);
将hero
对象powers
属性设置为标记的复选框值的数组。
有关.map()
和.filter()
的更多信息,请参见Array.prototype.filter()和Array.prototype.map()
答案 1 :(得分:1)
form.powers
可能是一个包含多个HTML输入元素的节点列表。传播语法[...form.powers]
将节点列表更改为数组,因此可以在其上进行映射。然后,您将从这些输入中过滤新创建的数组,这些输入未被选中,因此仅保留这些选中的内容。最后,您正在映射它们的值,因此您将收到一个字符串数组,具体取决于在这些输入中编写的值。
简而言之:
[...form.powers]
-传播语法将节点列表更改为数组.filter(...)
-摆脱未检查的输入.map(...)
-获取一个包含已检查输入值的数组