#javascript #arrays
#javascript #массивы
Вопрос:
У меня есть следующий массив объектов:
const pages = [
{
posts: {
pageInfo: {
hasNextPage: true
},
edges: [
{ id: 1 },
{ id: 2 }
]
}
},
{
posts: {
pageInfo: {
hasNextPage: true
},
edges: [
{ id: 3 },
{ id: 4 }
]
}
},
]
Мне нужно сохранить только содержимое edges
подмассивов, вот так:
const postsOnly = [
{ id: 1 },
{ id: 2 },
{ id: 3 },
{ id: 4 }
]
Ближе всего я подошел к тому, чтобы:
const postsOnly = pages.map( ( { posts } ) => posts.edges )
Но это оставляет мне подмассив для каждого исходного posts
объекта, например, так:
const postsOnly = [
[
{ id: 1 },
{ id: 2 }
],
[
{ id: 3 },
{ id: 4 }
]
]
Как я могу удалить эти подмассивы, но сохранить их содержимое?
Комментарии:
1.
const postsOnly = pages.flatMap( ( { posts } ) => posts.edges )
2. Я думаю, это неправильный синтаксис
3. @MaheerAli Почему? wandbox.org/permlink/cpnHlHBXEzfnuscC
4. @ThomasSablik Привет, спасибо! Если вы опубликуете это как ответ, я пометлю его как правильный ответ.
5. Привет всем, спасибо за все ответы, но я понял, что исходный пример был неправильным, так как у меня было два разных объекта «posts» в родительском массиве (сейчас я это исправил), так что некоторые ответы, возможно, были введены в заблуждение этим. Во всяком случае, ответ @ThomasSablik сработал для меня!
Ответ №1:
const pages = [{
posts: {
pageInfo: {
hasNextPage: true
},
edges: [
{ id: 1 },
{ id: 2 }
]
}},
{
posts: {
pageInfo: {
hasNextPage: false
},
edges: [
{ id: 3 },
{ id: 4 }
]
},
}];
const postsOnly = pages.map( ( { posts } ) => posts.edges).flat();
console.log(postsOnly);
То, что вы делаете, это нормально, вам просто не хватает .flat()
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/flat
Комментарии:
1. Данные, которые вы используете, не являются тем, что было опубликовано OP. Посмотрите, что это единственный объект во всем массиве. Может быть, указать на это тоже
2. Вы правы, я понял, что это неправильно, когда я скопировал / вставил его. Сделает это.
Ответ №2:
Вы можете либо использовать map(...).flat()
, либо flatMap(...)
сгладить результат
const pages = [
{
posts: {
pageInfo: {
hasNextPage: true
},
edges: [
{ id: 1 },
{ id: 2 }
]
}
},
{
posts: {
pageInfo: {
hasNextPage: true
},
edges: [
{ id: 3 },
{ id: 4 }
]
}
},
];
const postsOnly = pages.map( ( { posts } ) => posts.edges );
const postsOnly2 = pages.flatMap( ( { posts } ) => posts.edges );
const postsOnly3 = pages.map( ( { posts } ) => posts.edges ).flat();
console.log(postsOnly);
/* Output:
[ [ { id: 1 }, { id: 2 } ], [ { id: 3 }, { id: 4 } ] ]
*/
console.log(postsOnly2);
/* Output:
[ { id: 1 }, { id: 2 }, { id: 3 }, { id: 4 } ]
*/
console.log(postsOnly3);
/* Output:
[ { id: 1 }, { id: 2 }, { id: 3 }, { id: 4 } ]
*/