使用javascript中的重新格式化减少数组

使用javascript中的重新格式化减少数组,javascript,arrays,Javascript,Arrays,我想减少数组,使新对象中只存在主体 array = [{ subject: "maths", credits: 3 }, { subject: "chemistry", credits: 2, lab: { lab: "chemistry_lab", lab_credits: 1, }, } ] 将重新格式化新对象,并将其值指定为字符串。 实现这一目标

我想减少数组,使新对象中只存在主体

array = [{
    subject: "maths",
    credits: 3
  },
  {
    subject: "chemistry",
    credits: 2,
    lab: {
      lab: "chemistry_lab",
      lab_credits: 1,
    },
  }
]
将重新格式化新对象,并将其值指定为字符串。 实现这一目标的最佳方式是什么

const subject = {
  maths: "",
  chemistry: "",
  chemistry_lab: "",
};
我是这样尝试的,但它返回一个对象数组,但我希望它是一个如上所述的单个对象

const sub = array.map((op) => {
  const container = {};
  container[op.subject] = "";
  return container;
});

您的映射方法是正确的,但是,它不会映射
lab
对象。您可以采用一种方法,使用
.flatMap()
从数组中的每个对象构建一个
[key,value]
对数组。通过平面映射,您可以获取每个主题和实验室(如果存在),并将对象“转换”为两个键值数组。然后,您可以筛选此映射数组以删除任何
[key,value]
对,其中
为假值(即:未定义),然后在
[key,value]
对数组上使用
Object.fromEntries()
,为您构建一个对象

const数组=[{科目:“数学”,学分:3},{科目:“化学”,学分:2,实验室:{实验室:“化学实验室”,实验室学分:1,},}];
const res=Object.fromEntries(array.flatMap(obj=>[
[obj.subject',[obj.lab?.lab',]
]).filter(([key])=>key));

控制台日志(res)您的映射方法是正确的,但是,它不会映射
lab
对象。您可以采用一种方法,使用
.flatMap()
从数组中的每个对象构建一个
[key,value]
对数组。通过平面映射,您可以获取每个主题和实验室(如果存在),并将对象“转换”为两个键值数组。然后,您可以筛选此映射数组以删除任何
[key,value]
对,其中
为假值(即:未定义),然后在
[key,value]
对数组上使用
Object.fromEntries()
,为您构建一个对象

const数组=[{科目:“数学”,学分:3},{科目:“化学”,学分:2,实验室:{实验室:“化学实验室”,实验室学分:1,},}];
const res=Object.fromEntries(array.flatMap(obj=>[
[obj.subject',[obj.lab?.lab',]
]).filter(([key])=>key));
控制台日志(res)
var数组=[
{
主题:“数学”,
学分:3
},
{
主题:“化学”,
学分:2,
实验室:{
实验室:“化学实验室”,
实验室学分:1,
},
}
];
var p=数组。减少((acc,i)=>{
acc[i.受试者]='';
如果(i.lab){
acc[i.lab.lab]=''
}
返回acc;
},{})
console.log(p)
var数组=[
{
主题:“数学”,
学分:3
},
{
主题:“化学”,
学分:2,
实验室:{
实验室:“化学实验室”,
实验室学分:1,
},
}
];
var p=数组。减少((acc,i)=>{
acc[i.受试者]='';
如果(i.lab){
acc[i.lab.lab]=''
}
返回acc;
},{})
console.log(p)
let数组=[{
主题:“数学”,
学分:3
},
{
主题:“化学”,
学分:2,
实验室:{
实验室:“化学实验室”,
实验室学分:1,
},
}
]
设subject={}
array.forEach(el=>{
主题[el.subject]=“”
如果(el.lab){
主题[el.lab.lab]=“”
}
})
console.log(主题)
//输出
//{数学:,化学:,化学实验室:}
let数组=[{
主题:“数学”,
学分:3
},
{
主题:“化学”,
学分:2,
实验室:{
实验室:“化学实验室”,
实验室学分:1,
},
}
]
设subject={}
array.forEach(el=>{
主题[el.subject]=“”
如果(el.lab){
主题[el.lab.lab]=“”
}
})
console.log(主题)
//输出

//{数学:,,化学:,,化学实验室:}
我试过这个,并得到了结果。但我得到的结果是像[{数学:“},{化学:“}]这样的一系列对象。但我希望这只是一个单身object@MohammedRehan你能。通过编辑问题并将其添加到中,确定您的尝试吗?@NickParsons我已添加了我的尝试。为什么此映射中有
“化学实验室”
?它不是
主题
。这个映射的规则是什么?@Thomas映射就不存在了。为此,我添加了op.lab.lab,返回“chemistry_lab”。我尝试了这个,并得到了结果。但我得到的结果是像[{数学:“},{化学:“}]这样的一系列对象。但我希望这只是一个单身object@MohammedRehan你能。通过编辑问题并将其添加到中,确定您的尝试吗?@NickParsons我已添加了我的尝试。为什么此映射中有
“化学实验室”
?它不是
主题
。这个映射的规则是什么?@Thomas映射就不存在了。为此,我添加了op.lab.lab,返回“chemistry_lab”。感谢解决方案感谢解决方案