我正在抓取网页,并且需要使用数据集来获取所需的信息。我无法处理的数据集格式为<... data-info='["a","b","c"]'>
。我可以提取数据集并获取包含例如的数组。 info: "["a","b","c"]"
,但我无法将其设为从中获取数据的数组。
据我了解,数据集总是返回字符串,在这种情况下,字符串被格式化为数组。我试过使用split()函数,但似乎无法按照我想要的方式工作。
// myElements is an array of the elements i want by
// const myElements = [...querySelectorAll('myQuery')]
const myObj = myElements.map(a => ({ name: a.textContent, info: a.dataset.info }))
这给了我一组对象{name: "Some name", info: "["a","b","c"]"}
。
由于info
是一个字符串,因此我无法按照自己的方式使用它,因此我尝试了:
const myNewObj = myObj.map(a => ({
name: a.name,
info: a.info.split(/(?:\[")|(?:",")|(?:"\])/g)
}))
这接近我想要的{name: "Some name", info: ["","a","b","c",""]}
问题是第一个和最后一个条目为空。
我可以添加有效的.filter(a => a ? true : false)
,因此通过编写此问题,我已经解决了我的问题。但是我发现生成的代码很混乱,希望您输入更好的方法来解决它!
解决方案(请参阅链接的问题):
const myObj = myElements.map(a => ({ name: a.textContent, info: JSON.parse(a.dataset.info) }));