javascript - 如何在不创建重复数组括号的情况下向 JSON 对象添加新数组
问题描述
这些嵌套的 for 循环遍历包含产品类别和子类别的 JSON 对象。它循环通过这些将 URL 参数发送到函数以根据参数抓取网站。我找不到将包含抓取数据的返回数组添加到 JSON 对象(根据其在嵌套循环中的位置)的方法,而不必先创建一个空数组,然后使用 .push 填充它,从而复制数组括号。返回抓取数据的函数已经将数据添加到数组中,所以我不知道该怎么做。
以下循环将正确的数据添加到 JSON 对象,但是数组括号增加了三倍。
for (let i=0; i<obj.length; i++) {
let subcats = obj[i].subcategories;
for(let n=0; n<subcats.length; n++) {
if(!subcats.facetValueData) {
subcats[n].code.replace(/\s/g, '')
let productDataSub = []
subcats[n].productData = productDataSub
subcats[n].productData.push(await scrapeData(obj[i].subcategories[n].code))
} else {
let subcatsFinal = subcats[n].facetValueData
for(let p=0; p<subcatsFinal.length; p++) {
subcatsFinal[p].code.replace(/\s/g, '')
let productData = []
subcatsFinal[p].productData = productData
subcatsFinal[p].productData.push(await scrapeData(obj[i].subcategories[n].facetValueData[p].code))
}
}
}
}
以下是循环的 JSON 数据,这productData=[]
是 productData 数组应该去哪里的示例,但在循环数据时它不存在。这是我想要实现的,但是里面填充了数据。“代码”值是附加到 url 以抓取该页面数据的参数。
[
{
"id": 0,
"categoryName": "Beauty",
"subcategories": [
{
"count": 2688,
"code": "/beauty/skin-care",
"name": "Skincare",
"facetValueData": [
{
"count": 682,
"code": "/beauty/skin-care/lotion-serum-and-essence",
"name": "Lotion Serum & Essence",
"productData": []
},
{
"count": 497,
"code": "/beauty/skin-care/moisturiser-and-mist",
"name": "Moisturiser & Mist",
"productData": []
},
{
"count": 354,
"code": "/beauty/skin-care/cleanser-and-exfoliation",
"name": "Cleanser & Exfoliation",
"productData": []
},
{
"count": 345,
"code": "/beauty/skin-care/mask-and-treatment",
"name": "Mask & Treatment",
"productData": []
}
]
},
{
"count": 1549,
"code": "/beauty/makeup",
"name": "Makeup",
"facetValueData": [
{
"count": 653,
"code": "/beauty/makeup/face",
"name": "Face",
"productData": []
},
{
"count": 460,
"code": "/beauty/makeup/makeup-lips",
"name": "Lips",
"productData": []
},
{
"count": 337,
"code": "/beauty/makeup/eyes",
"name": "Eyes",
"productData": []
},
{
"count": 124,
"code": "/beauty/makeup/makeup-cheeks",
"name": "Cheeks",
"productData": []
}
]
}
]
},
{
"id": 1,
"categoryName": "Electronics",
"subcategories": [
{
"count": 526,
"code": "/electronics/audio-devices",
"name": "Audio",
"facetValueData": [
{
"count": 153,
"code": "/electronics/audio-devices/speakers",
"name": "Speakers",
"productData": []
},
{
"count": 145,
"code": "/electronics/audio-devices/earphones",
"name": "Earphones",
"productData": []
},
{
"count": 142,
"code": "/electronics/audio-devices/headphones",
"name": "Headphones",
"productData": []
},
{
"count": 51,
"code": "/electronics/audio-devices/true-wireless-and-airpods",
"name": "True Wireless & Airpods",
"productData": []
}
]
}
]
}
]
不确定是否所有必要,但这是抓取页面并返回数组的异步函数:
async function scrapeData(queryParam) {
let pageCounter = 0;
var product = []
var pagination;
try {
do {
var nextPageLink = `currentPage=${pageCounter}&query=::cagCollectionPoint:Departure+from+Singapore:cagCategory:${queryParam}`
var nextUrl = url.concat(nextPageLink)
const response = await axios({
method: "GET",
url: nextUrl,
withCredentials: true,
headers: headers
})
console.log(nextUrl)
product.push(response.data["products"])
pagination = response.data["pagination"]["totalPages"]
pageCounter++;
// console.log(response.data.currentQuery.query.value)
} while (pageCounter<=0)
return product;
} catch (error) {
console.error(error)
}
}
解决方案
推荐阅读
- json - Blazor WebAssembly JsonException:检测到不支持的可能对象循环
- javascript - 如何有条件地在 gatsby 中呈现移动导航?
- amazon-web-services - 将 docker-compose 项目部署到 ECS 中
- javascript - heroku login command doesn't exist
- excel - VBA - Creating a "Color Check Range" to Reverse Loop
- php - How to generate a student ID in PHP? And how to avoid goto?
- python - 如何修复 AttributeError:“喜欢”对象没有属性“过滤器”
- react-native - React Switch withStyles disabled coloration
- php - Ajax response is not returning in sorted form laravel controller
- reactjs - Invariant Violation: `requireNativeComponent`