我需要按属性过滤数组:
这是我从服务器获取的数据:
const mockResults = [
{
user: {
firstName: '1',
lastName: '1'
},
status: 'WRONG'
},
{
user: {
firstName: '2',
lastName: '2'
},
status: 'WRONG'
},
{
user: {
firstName: '3',
lastName: '3'
},
status: 'CORRECT'
}
];
要显示数据,我需要将其转换为 ReactNative SectionList 格式所需的格式:
const requiredFormat = [
{
status: 'WRONG',
data: [{ user: {firstName: '1', lastName: '1'}}, { user: {firstName: '2', lastName: '2'}}],
},
{
status: 'CORRECT',
data: [{ user: {firstName: '3', lastName: '3'}}],
},
];
基本上,mockResults
应该按 排序status
。最多可以有 4 种状态:correct, wrong, missed, chosen
. 所有这些状态都应该包括用它们标记的所有数据。
实现这一点的正确方法是什么?
我试图过滤数组,但我被困在这一点上:
const transformArray = mockResults.filter(item => {
return {
answerStatus: item.status,
data: [item.user]
}
})
您可以遍历数组(使用Array.prototype.reduce()
方法)并在您看到当前没有这样的status
元素或附加当前元素数据(如果存在)时创建结果数组的新元素:
const mockResults = [{user:{firstName:'1',lastName:'1'},status:'WRONG'},{user:{firstName:'2',lastName:'2'},status:'WRONG'},{user:{firstName:'3',lastName:'3'},status:'CORRECT'}],
result = mockResults.reduce((r,{status, ...rest}) => {
const common = r.find(e => e.status == status)
common ?
common.data.push(rest) :
r.push({status, data:[rest]})
return r
}, [])
console.log(result)
.as-console-wrapper {min-height:100%}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句