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;
}, {});