按状态转换数据数组

莱查姆

我需要按属性过滤数组:

这是我从服务器获取的数据:

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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章