结合 forEach 回调参数和函数参数
Combine forEach callback parameter with function parameter
我正在尝试将 forEach
回调参数(HTMLAnchorElement
/HTMLTableCellElement
对象)与函数参数 (string
) 结合起来。
我正在做的是在一个函数调用中获取 a
标记的 href
,然后在另一个函数调用中获取 td
标记的 textContent
,使用相同的功能。
这是我的代码:
// example usage of function
await scraper.scraper(args, 'a[href]', 'href') // get href
await scraper.scraper(args, 'table tr td', 'textContent') // get textContent
// scraper function
const scraper = async (urls, regex, property) => {
const promises = []
const links = []
urls.forEach(async url => {
promises.push(fetchUrls(url))
})
const promise = await Promise.all(promises)
promise.forEach(html => {
const arr = Array.from(new JSDOM(html).window.document.querySelectorAll(regex))
arr.forEach(tag => {
links.push(tag.href) // how about textContent?
})
})
return links
}
有没有办法将 forEach
的回调参数 tag
与函数参数 property
结合起来?
下面的代码有效。但是,如果我想对其他属性进行进一步的函数调用怎么办?我不想在每次调用另一个函数时都添加 if 语句,这违背了我的函数可重用的目的。
property === 'textContent' ? links.push(tag.textContent) : links.push(tag.href)
任何试图将两者结合起来的尝试似乎都会出错。不可能吗?
使用您传入的 属性 值作为 el 对象的计算键(代码中的 tag
),以便将 属性 值传递给forEach
动态地,取决于您传入的 属性
arr.forEach(el => {
links.push(el[property]);
})
我正在尝试将 forEach
回调参数(HTMLAnchorElement
/HTMLTableCellElement
对象)与函数参数 (string
) 结合起来。
我正在做的是在一个函数调用中获取 a
标记的 href
,然后在另一个函数调用中获取 td
标记的 textContent
,使用相同的功能。
这是我的代码:
// example usage of function
await scraper.scraper(args, 'a[href]', 'href') // get href
await scraper.scraper(args, 'table tr td', 'textContent') // get textContent
// scraper function
const scraper = async (urls, regex, property) => {
const promises = []
const links = []
urls.forEach(async url => {
promises.push(fetchUrls(url))
})
const promise = await Promise.all(promises)
promise.forEach(html => {
const arr = Array.from(new JSDOM(html).window.document.querySelectorAll(regex))
arr.forEach(tag => {
links.push(tag.href) // how about textContent?
})
})
return links
}
有没有办法将 forEach
的回调参数 tag
与函数参数 property
结合起来?
下面的代码有效。但是,如果我想对其他属性进行进一步的函数调用怎么办?我不想在每次调用另一个函数时都添加 if 语句,这违背了我的函数可重用的目的。
property === 'textContent' ? links.push(tag.textContent) : links.push(tag.href)
任何试图将两者结合起来的尝试似乎都会出错。不可能吗?
使用您传入的 属性 值作为 el 对象的计算键(代码中的 tag
),以便将 属性 值传递给forEach
动态地,取决于您传入的 属性
arr.forEach(el => {
links.push(el[property]);
})