在javascript中从另一个数组重新构建对象数组

在javascript中从另一个数组重新构建对象数组,javascript,lodash,javascript-objects,es6-class,Javascript,Lodash,Javascript Objects,Es6 Class,要从另一个对象数组创建一个数组,如下所示,请使用 javascriptarr是输入数组,它应该输出为outArr 输入数组: var arr = [ {name: 'A', flag: 0}, {email: 'B', flag: 0}, {address: 'C', flag: 0}, {name: 'A1', flag: 1}, {email: 'B1', flag: 1}, {address: 'C1', flag: 1} ] var ou

要从另一个对象数组创建一个数组,如下所示,请使用 javascriptarr是输入数组,它应该输出为outArr

输入数组:

var arr = [
    {name: 'A', flag: 0},
    {email: 'B', flag: 0},
    {address: 'C', flag: 0},
    {name: 'A1', flag: 1},
    {email: 'B1', flag: 1},
    {address: 'C1', flag: 1}
]
var outArr = [
   {
     name: 'A',
     email: 'B',
     address: 'C'
   },
   {
     name: 'A1',
     email: 'B1',
     address: 'C1'
   }
]
输出数组:

var arr = [
    {name: 'A', flag: 0},
    {email: 'B', flag: 0},
    {address: 'C', flag: 0},
    {name: 'A1', flag: 1},
    {email: 'B1', flag: 1},
    {address: 'C1', flag: 1}
]
var outArr = [
   {
     name: 'A',
     email: 'B',
     address: 'C'
   },
   {
     name: 'A1',
     email: 'B1',
     address: 'C1'
   }
]
使用、和和

const数据=[
{name:'A',标志:0},
{电子邮件:“B”,标志:0},
{地址:'C',标志:0},
{name:'A1',标志:1},
{电子邮件:“B1”,标志:1},
{地址:'C1',标志:1}
];
const res=data.reduce((a,{flag,…rest})=>{
返回a.set(标志,{…a.get(标志),…rest});
},新映射())。值();
console.log([…res])通过
标记
删除项目,然后使用删除
标记

const arr=[{“name”:“A”,“flag”:0},{“email”:“B”,“flag”:0},{“address”:“C”,“flag”:0},{“name”:“A1”,“flag”:1},{“email”:“B1”,“flag”:1},{“address”:“C1”,“flag”:1}]
常数fn=u0.flow(
arr=>uu.groupBy(arr,'flag'),
groups=>\.map(groups,g=>\.omit(\.merge({},…g),'flag')),
)
常数结果=fn(arr)
console.log(结果)

使用普通javascript
reduce
您可以这样做。
var-arr=[
{name:'A',标志:0},
{电子邮件:“B”,标志:0},
{地址:'C',标志:0},
{name:'A1',标志:1},
{电子邮件:“B1”,标志:1},
{地址:'C1',标志:1}
]
让输出=对象值(arr.reduce((op,cur)=>{
let key=Object.keys(cur)[0]
如果(操作[当前标志]){
op[cur.flag][key]=当前[key]
}否则{
op[cur.flag]={key:cur[key]}
}
返回op;
},{}) )

log(output)
您可以获取对象的其余部分,并将其添加到结果数组的对象中,并将标志作为索引

var数组=[{name:'A',flag:0},{email:'B',flag:0},{address:'C',flag:0},{name:'A1',flag:1},{email:'B1',flag:1},{address:'C1',flag:1}],
结果=数组.reduce((r,{flag,…o})=>{
赋值(r[flag]=r[flag]|{},o);
返回r;
}, []);
控制台日志(结果)
.as控制台包装{最大高度:100%!重要;顶部:0;}
var arr=[
{name:'A',标志:0},
{电子邮件:“B”,标志:0},
{地址:'C',标志:0},
{name:'A1',标志:1},
{电子邮件:“B1”,标志:1},
{地址:'C1',标志:1}
]
变量输出阵列=[]
对于(变量i=0;i

这里有一个简单的答案,有一个for循环。

您尝试了什么,面临什么问题?您是否在问如何按标志分组?