繁体   English   中英

从对象中删除嵌套数组

[英]Remove nested array from an object

什么是最好的转换方式

const mockResults = [
    [{ user: { firstName: '1', lastName: '1' }, status: 'WRONG' }],
    [{ user: { firstName: '2',lastName: '2' }, status: 'WRONG' }],
    [{ user: { firstName: '3',lastName: '3' }, status: 'CORRECT' }]
];

const mockResults = [
    { user: { firstName: '1', lastName: '1' }, status: 'WRONG' },
    { user: { firstName: '2',lastName: '2' }, status: 'WRONG' },
    { user: { firstName: '3',lastName: '3' }, status: 'CORRECT' }
];

整个任务是将mockResults转换为requiredFormat ,这就是我需要删除嵌套数组的原因:

const requiredFormat = [
  {
    status: 'WRONG',
    data: [{ user: {firstName: '1', lastName: '1'}}, { user: {firstName: '2', lastName: '2'}}],
  },
  {
    status: 'CORRECT',
    data: [{ user: {firstName: '3', lastName: '3'}}],
  },
];

这是我到目前为止尝试过的: https : //jsfiddle.net/9uLje3sg/

谢谢!

您可以使用来自 Array javascript 对象的 flat 方法。 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/flat

如果你想改变数据的来源并改变它的形状,使用 map 和 reduce 方法可以帮助你。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce

在您的精确示例中,当您为每个状态属性创建一个新的对象分组时,reduce 将适合。

 const mockResults = [ [{ user: { firstName: '1', lastName: '1' }, status: 'WRONG' }], [{ user: { firstName: '2',lastName: '2' }, status: 'WRONG' }], [{ user: { firstName: '3',lastName: '3' }, status: 'CORRECT' }] ]; const flattedAndReduced = mockResults.flat().reduce( (acc, curr)=>{ const statusIndex = { 'WRONG' : 0, 'CORRECT': 1 }; acc[statusIndex[curr.status]].data.push({ user: curr.user} ); return acc; }, [ { status: 'WRONG', data: [], }, { status: 'CORRECT', data: [], } ] ); console.log(flattedAndReduced);

使用函数map如下,它返回一个包含所需对象的数组。

let result = mockResults.map(([user]) => user);

这种方法假设原始数组中的每个数组只有一个索引。

根据requiredFormat的方法

您可以使用函数reduce进行分组,使用函数Object.values来获取所需的输出。

 const mockResults = [ [{ user: { firstName: '1', lastName: '1' }, status: 'WRONG' }], [{ user: { firstName: '2',lastName: '2' }, status: 'WRONG' }], [{ user: { firstName: '3',lastName: '3' }, status: 'CORRECT' }] ]; let requiredFormat = Object.values(mockResults.reduce((a, [{user, status}]) => { (a[status] || (a[status] = {data: [], status})).data.push(user); return a; }, Object.create(null))); console.log(requiredFormat);
 .as-console-wrapper { max-height: 100% !important; top: 0; }

只需使用Array.prototype.map()从第一个索引返回对象。

请注意:const声明的变量不能修改,请使用 * let代替。

 let mockResults = [ [{ user: { firstName: '1', lastName: '1' }, status: 'WRONG' }], [{ user: { firstName: '2',lastName: '2' }, status: 'WRONG' }], [{ user: { firstName: '3',lastName: '3' }, status: 'CORRECT' }] ]; mockResults = mockResults.map(i => i[0]); console.log(mockResults);

 const mockResults = [ [{ user: { firstName: '1', lastName: '1' }, status: 'WRONG' }], [{ user: { firstName: '2',lastName: '2' }, status: 'WRONG' }], [{ user: { firstName: '3',lastName: '3' }, status: 'CORRECT' }] ]; const requiredFormat = [ {status: 'WRONG', data: []}, {status: 'CORRECT', data: []}, ]; for(let [{user,status}] of mockResults) { requiredFormat[ status==="WRONG" ? 0 : 1].data.push({user}); } console.log(requiredFormat);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM