我正在使用Babel / ES6构建应用程序。我想禁用它的仅查看版本的所有表单元素,所以我这样做了:
let form = document.getElementById('application-form')
let elements = form.elements
我希望能够做到这一点,而不是使用常规的旧for
循环(确实有效):
elements.forEach((el) => {
el.disabled = true
})
但我得到了TypeError: elements.forEach is not a function
奇怪的是,如果我在Chrome开发者控制台中console.log(elements)
,它就像一个带有一堆input
个对象的数组。它不显示对象的Object
表示法,并且所有键都是整数。我认为它是某种伪数组,但我甚至不知道如何找到它。
编辑:简短回答它不是数组,它是HTMLCollection。见Why doesn't nodelist have forEach?
根据this answer,nodelist
现在有forEach
方法!
答案 0 :(得分:15)
你可以。你只是不能像那样使用,因为HTMLFormControlsCollection
给你的form.elements
没有forEach
属性(这不是一个数组)
无论如何你都可以使用它:
Array.prototype.forEach.call(form.elements, function(element) {
// ...
});
或者可以能够使用点差表示法:
[...elements].forEach(function(element) {
// ...
});
...但请注意,它依赖于浏览器中HTMLFormControlsCollection
实现 iterable 。
或者Array.from
(你需要一个polyfill,但你标记了ES2015,所以......):
Array.from(elements).forEach(function(element) {
// ...
});
有关详细信息,请参阅my answer here的“array-like”部分。
答案 1 :(得分:1)
您无法在forEach
上使用HMTLCollection
。 forEach
只能用于`array。
替代方案是,使用lodash并执行_.toArray()
,这会将HTMLColelction转换为数组。在此之后,您可以对其执行常规数组操作。或者,使用ES6 spread
并执行forEach()
像这样,
var a = document.getElementsByTagName('div')
[...a].forEach()
答案 2 :(得分:0)
with data as (
select *,
row_number() over (
partition by
cast(column_ts as date),
datepart(hour, column_ts),
datepart(minute, column_ts) / 30
order by
column_ts
) as rn
)
select *
from data
where rn = 1;
,import numpy as np
from scipy.optimize import curve_fit
from scipy.signal import find_peaks_cwt
from math import *
peak_indices = find_peaks_cwt(data, *args)
#make a fitting function that takes x number of peak widths
def makeFunction(indices, data):
def fitFunction(x, *args):
#sum of gaussian functions with centers at peak_indices and heights at data[peak_indices] plus a constant for background noise (args[-1])
return sum([data[indices[i]]*exp(-((x-indices[i])**2)/(2*args[i]**2)) for i in range(len(peak_indices))])+args[-1] #does my code golfing show? xD
return fitFunction
f = makeFunction(peak_indices, data)
#you must provide the initial guess of "np.ones(len(peak_indices)+1)" for the parameters, because f(x, *args) will otherwise take a variable number of arguments.
popt, pcov = curve_fit(f, np.arange(len(data)), data, np.ones(len(peak_indices)+1))
#standard deviations (widths) of each gaussian peak and the average of the background noise
stdevs, background = popt[:-1], popt[-1]
#covariance of result variables
stdevcov, bgcov = pcov[:-1], pcov[-1]
,form.elements
和document.getElementsByTagName
返回节点列表。
节点列表本质上是一个没有像数组一样的方法的对象。
如果您希望将节点列表用作数组,可以使用document.getElementsByClassName
或document.querySelectorAll
Array.from(NodeList)

Array.prototype.slice.call(NodeList)