У меня есть объект ответа, из которого я хочу извлечь все значения id
, но я не уверен, что это лучший способ сделать это...
const obj = {
"responseArray":[
{
"accounts":[
{
"products":[
{
"id":"123",
}
]
},
{
"products":[
{
"id":"456",
}
]
}
]
},
{
"accounts":[
{
"products":[
{
"id":"987",
}
]
},
{
"products":[
{
"id":"654",
}
]
}
]
}
]
}
Самое близкое, что я получил, это картографирование
const mapped = obj.responseArray.map(item => item?.accounts.map(acc => acc.products.map(prod => prod.id)))
// Response
// [ [ [Array], [Array] ], [ [Array], [Array] ] ]
Эти Array
биты на самом деле содержат нужные мне идентификаторы, просто они явно не в том формате, который мне нужен...
🤔 А знаете ли вы, что...
JavaScript можно использовать для создания ботов и автоматизации задач в браузерах с помощью Puppeteer.
Вы можете использовать FlatMap, чтобы получить простой массив вместо массива массивов:
const obj = {
"responseArray":[
{
"accounts":[
{
"products":[
{
"id":"123",
}
]
},
{
"products":[
{
"id":"456",
}
]
}
]
},
{
"accounts":[
{
"products":[
{
"id":"987",
}
]
},
{
"products":[
{
"id":"654",
}
]
}
]
}
]
}
const mapped = obj.responseArray.flatMap(item => item?.accounts.flatMap(acc => acc.products.map(prod => prod.id)))
console.info(mapped)
С помощью «современных» (Chrome 69, Firefox 62, Edge 79, Opera 56, Safari 12) версий JavaScript вы можете Array.prototype.flatMap:
obj.responseArray
.flatMap(x => x.accounts)
.flatMap(x => x.products)
.map(x => x.id)
// [ '123', '456', '987', '654' ]
flatMap
принимает функцию, которая возвращает массив, и сопоставляет все массивы этой функции в один большой массив, который затем можно обрабатывать дальше.
Я использую forEach для выполнения работы.
const obj = {
"responseArray": [{
"accounts": [{
"products": [{
"id": "123",
}]
},
{
"products": [{
"id": "456",
}]
}
]
},
{
"accounts": [{
"products": [{
"id": "987",
}]
},
{
"products": [{
"id": "654",
}]
}
]
}
]
}
let result=[];
obj.responseArray.forEach(o=>{
o.accounts.forEach(account=>{
account.products.forEach(product=>{
result.push(product.id);
})
})
})
console.info(result)
Я думаю, вы ищете что-то вроде этого, Нам нужно использовать FlatMap для выравнивания и сопоставления массивов:
obj.responseArray
.flatMap(item => item.accounts)
.flatMap(account => account.products)
.map(product => product.id);
// response: [ '123', '456', '987', '654' ]