[英]React: group by multidimensional array object by value in component
How to group multidimensional array objects by value in the component.如何在组件中按值对多维数组对象进行分组。
I need to group array by page and get the text for every page.我需要按页对数组进行分组并获取每一页的文本。 I tray to use the map and reduce it but don't get good results.
我尝试使用地图并减少它,但没有得到好的结果。 I work on
react-native
project.我从事
react-native
项目。 JS function groups doesn't work for some reason. JS 函数组由于某种原因不起作用。
What is the best way to write code for this array?为这个数组编写代码的最佳方法是什么?
I have this array:我有这个数组:
[
{
number: 1,
englishName: 'Name 1',
items: [
{
text: 'Some text',
page: 1,
},
{
text: 'Some text',
page: 1,
},
],
},
{
number: 2,
englishName: 'Name 2',
items: [
{
text: 'Some text',
page: 2,
},
{
text: 'Some text',
page: 2,
},
],
},
{
number: 3,
englishName: 'Name 3',
items: [
{
text: 'Some text',
page: 3,
},
{
text: 'Some text',
page: 4,
},
],
},
]
I need an array like this我需要一个这样的数组
[
{
'page 1': [
{
text: 'Some text',
englishName: 'Name 1',
},
{
text: 'Some text',
englishName: 'Name 2',
},
],
},
{
'page 2': [
{
text: 'Some text',
englishName: 'Name 2',
},
{
text: 'Some text',
englishName: 'Name 2',
},
],
},
....
]
Seems like this will work for you.看起来这对你有用。
This will give you an object:这会给你一个对象:
const allPages = array.reduce((acc, curr) => {
curr.items.forEach((page) => {
var pageKey = `page ${page.page}`
if(!acc[pageKey]){
acc[pageKey] = []
}
acc[pageKey].push({ text: page.text, englishName: curr.englishName })
})
return acc
}, {})
You can convert that object into an array as well:您也可以将该对象转换为数组:
const finalArr = Object.entries(allPages).map(([page, array]) => {
return {
[page]: array
}
})
See example:见示例:
var array = [{ "number": 1, "englishName": "Name 1", "items": [ { "text": "Some text", "page": 1, }, { "text": "Some text", "page": 1, } ] }, { "number": 2, "englishName": "Name 2", "items": [ { "text": "Some text", "page": 2, }, { "text": "Some text", "page": 2, } ] }, { "number": 3, "englishName": "Name 3", "items": [ { "text": "Some text", "page": 3, }, { "text": "Some text", "page": 4, } ] } ] const allPages = array.reduce((acc, curr) => { curr.items.forEach((page) => { var pageKey = `page ${page.page}` if(!acc[pageKey]){ acc[pageKey] = [] } acc[pageKey].push({ text: page.text, englishName: curr.englishName }) }) return acc }, {}) const finalArr = Object.entries(allPages).map(([page, array]) => { return { [page]: array } }) console.log(allPages) console.log(finalArr)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.