使用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”。感谢解决方案感谢解决方案