Javascript 将对象数组转换为单个对象

Javascript 将对象数组转换为单个对象,javascript,arrays,object,Javascript,Arrays,Object,这是我的初始数组: [ { id: 1, name: 'pos', code: 'pos123', appCode: 22, }, { id: 2, name: 'tailor', code: 'tailor123', appCode: 21, } ] 我的期望输出: { pos123: { id: 1, name: 'pos', code: 'pos123', a

这是我的初始数组:

[ 
   { 
    id: 1,
    name: 'pos',
    code: 'pos123',
    appCode: 22,
   },
  { 
    id: 2,
    name: 'tailor',
    code: 'tailor123',
    appCode: 21,
  } 
]
我的期望输出:

{
   pos123: {
    id: 1,
    name: 'pos',
    code: 'pos123',
    appCode: 22,
  },
  tailor123: {
    id: 2,
    name: 'tailor',
    code: 'tailor123',
    appCode: 21,
  },
}

我试着用
map
,但我想不出来。我应该在这里使用
reduce
吗?

您可以使用
对象。指定
将数组映射到期望的键和值形状。尝试:

let数组=[
{ 
id:1,
名称:'pos',
代码:“pos123”,
应用代码:22,
},
{ 
id:2,
名字:“裁缝”,
代码:“tailor123”,
应用代码:21,
} 
];
让output=Object.assign(…array.map(x=>({[x.code]:x}));

控制台日志(输出)您可以使用
对象。指定
将数组映射到期望的键和值形状。尝试:

let数组=[
{ 
id:1,
名称:'pos',
代码:“pos123”,
应用代码:22,
},
{ 
id:2,
名字:“裁缝”,
代码:“tailor123”,
应用代码:21,
} 
];
让output=Object.assign(…array.map(x=>({[x.code]:x}));

控制台日志(输出)您的输出不是数组-它是一个对象,因此您必须使用
reduce
。只能使用
map
将一个数组中的X个项目数转换为另一个数组中的X个项目数

const input=[{id:1,名称:'pos',代码:'pos123',应用代码:22,},{id:2,名称:'tailor',代码:'tailor123',应用代码:21,}]
常量输出=输入。减少((a,obj)=>{
a[obj.代码]=obj;
返回a;
}, {});

控制台日志(输出)您的输出不是数组-它是一个对象,因此您必须使用
reduce
。只能使用
map
将一个数组中的X个项目数转换为另一个数组中的X个项目数

const input=[{id:1,名称:'pos',代码:'pos123',应用代码:22,},{id:2,名称:'tailor',代码:'tailor123',应用代码:21,}]
常量输出=输入。减少((a,obj)=>{
a[obj.代码]=obj;
返回a;
}, {});

控制台日志(输出)使用数组缩减函数

var数据=[{
id:1,
名称:'pos',
代码:“pos123”,
应用代码:22,
},
{
id:2,
name:'裁缝',
代码:“tailor123”,
应用代码:21,
}
]
var modData=data.reduce(函数(acc,curr){
//acc是作为参数传递的空数组
//如果空数组没有pos123左右的属性
//使用此名称创建密钥
如果(!acc.hasOwnProperty(当前代码)){
//然后向其添加属性
会计科目[当前代码]={
id:curr.id,
名称:curr.name,
appCode:curr.appCode
}
}
返回acc;
}, {})

console.log(modData)
使用数组缩减功能

var数据=[{
id:1,
名称:'pos',
代码:“pos123”,
应用代码:22,
},
{
id:2,
名字:“裁缝”,
代码:“tailor123”,
应用代码:21,
}
]
var modData=data.reduce(函数(acc,curr){
//acc是作为参数传递的空数组
//如果空数组没有pos123左右的属性
//使用此名称创建密钥
如果(!acc.hasOwnProperty(当前代码)){
//然后向其添加属性
会计科目[当前代码]={
id:curr.id,
名称:curr.name,
appCode:curr.appCode
}
}
返回acc;
}, {})

log(modData)
使用循环可以完成此操作

const resp=[
{
id:1,
名称:'pos',
代码:“pos123”,
应用代码:22,
},
{
id:2,
名字:“裁缝”,
代码:“tailor123”,
应用代码:21,
}
]
设res={};
for(设i=0;i控制台日志(res)使用循环可以完成此操作

const resp=[
{
id:1,
名称:'pos',
代码:“pos123”,
应用代码:22,
},
{
id:2,
名字:“裁缝”,
代码:“tailor123”,
应用代码:21,
}
]
设res={};
for(设i=0;i控制台日志(res)其他解决方案似乎包括结果对象中的“代码”属性。这个没有

<代码>常量测试=[ { id:1, 名称:'pos', 代码:“pos123”, 应用代码:22, }, { id:2, 名字:“裁缝”, 代码:“tailor123”, 应用代码:21, } ]; const test2=JSON.parse(JSON.stringify(test)); const result=document.querySelector(“结果”); result.textContent=“**无冗余\n”+JSON.stringify( 测试减少((newObj,el)=> (newObj[el.code]=删除el.code&&el)&&newObj,{} ),null,“”; //另类 result.textContent+=“\n\n**Alternative\n”+JSON.stringify( test2.reduce((newObj,el)=>(newObj[el.code]=el)和&newObj,{} ),null,“”
其他解决方案似乎包括结果对象中的“code”属性。这个没有

const test=[
{ 
id:1,
名称:'pos',
代码:“pos123”,
应用代码:22,
}, { 
id:2,
名字:“裁缝”,
代码:“tailor123”,
应用代码:21,
} 
];
const test2=JSON.parse(JSON.stringify(test));
const result=document.querySelector(“结果”);
result.textContent=“**无冗余\n”+JSON.stringify(
测试减少((newObj,el)=>
(newObj[el.code]=删除el.code&&el)&&newObj,{}
),null,“”;
//另类
result.textContent+=“\n\n**Alternative\n”+JSON.stringify(
test2.reduce((newObj,el)=>(newObj[el.code]=el)和&newObj,{}
),null,“”

您正在放置appCode,name static,但我的json包含20多个数据?@MohamedSameer updated,您可以在此处使用解构抱歉,我忘了放置,我还需要在主对象内放置code对象@MohamedSameer好的,这样比较容易。请修改您的原始帖子您正在放置appCode,name static,但我的json包含20多个数据?@MohamedSameer更新,您可以在此使用解构抱歉,我忘了放置,我还需要在主对象内放置code对象@MohamedSameer好的,这样比较容易。请修改你原来的帖子对不起,我忘记放了,我还需要代码obj
var yourArray = [ 
 { 
  id: 1,
  name: 'pos',
  code: 'pos123',
  appCode: 22,
  },
 {  
  id: 2,
  name: 'tailor',
  code: 'tailor123',
  appCode: 21,
 } 
];

//this is what you required
var output =  yourArray.reduce((obj, item) => {
  obj[code] =item;
  return obj;
}, {});