gpt4 book ai didi

javascript - 嵌套对象的键在格式化和渲染后丢失

转载 作者:行者123 更新时间:2023-11-29 20:26:58 24 4
gpt4 key购买 nike

我有这个对象,我一直试图在没有对象语法的情况下在我的 ejs 模板中打印它。我在 StackOverflow 中遵循了一个答案,并成功地在没有语法的情况下打印了它,但它并没有打印嵌套对象中的所有内容。我的意思是数据中有两个嵌套对象(f 和 g)。因此,输出中缺少那些嵌套对象中的属性(键),如姓名、电子邮件、电话、国家、汽车。我怎样才能用他们尊重的值(value)观来呈现它?

这是我用来格式化它的对象和代码:

router.get("/", async(req, res) => {
try{
let data = {
a: 'Tesla',
b: 'Mclaren',
c: 'Ferrari',
d: 'Lamborghini',
e: 'Lotus',
'f':{
name: 'John',
'e-mail': 'xyz@example.com',
phone: '+12345678',
country: 'USA',
car: 'Toyota Prius'
},
'g':{
name: 'Sophie',
'e-mail': 'xyz@example.com',
phone: '+12345678',
country: 'UK',
car: 'Nissan Bluebird'
},
h: 'Volkswagen',
i: 'Bugatti',
j:[
'% mileage',
'% top speed',
'% suspension',
'% navigation',
'% horsepower',
'% 0-60s'
]
}
var result = Object.entries(data).reduce((result, [key, value]) => {
key = key.replace(/([A-Z]|\d+)/g, ' $1').replace(/^(.)/, (unused, p1) => p1.toUpperCase());
if (!['string', 'number', 'boolean'].includes(typeof value)) {
value = Object.entries(value).map(([key, value]) => (typeof value == 'boolean') ? (value ? key : undefined) : value).filter(v => v !== undefined).join(',');
}
result.push(`${key}: ${value}`);
return result;
}, []);
var finalData = result.join('\n');
res.render("data", {data: finalData});
}catch(e){
req.flash("error", "Unable to retrieve data. Please try again!");
res.redirect("/");
}
});

这是我在控制台打印的结果:

A: Tesla
B: Mclaren
C: Ferrari
D: Lamborghini
E: Lotus
F: John,xyz@example.com,+12345678,USA,Toyota Prius
G: Sophie,xyz@example.com,+12345678,UK,Nissan Bluebird
H: Volkswagen
I: Bugatti
J: % mileage,% top speed,% suspension,% navigation,% horsepower,% 0-60s

这是我在我的 ejs 模板中渲染后的结果:

A: Tesla B: Mclaren C: Ferrari D: Lamborghini E: Lotus F: John,xyz@example.com,+12345678,USA,Toyota Prius G: Sophie,xyz@example.com,+12345678,UK,Nissan Bluebird H: Volkswagen I: Bugatti J: % mileage,% top speed,% suspension,% navigation,% horsepower,% 0-60s

预期结果:

A: Tesla
B: Mclaren
C: Ferrari
D: Lamborghini
E: Lotus
F:
Name: John
Email: xyz@example.com
Phone: +12345678
Country: USA
Car: Toyota Prius
G:
Name: Sophie
Email: xyz@example.com
Phone: +12345678
Country: UK
Car: Nissan Bluebird
H: Volkswagen
I: Bugatti
J:
% mileage
% top speed
% suspension
% navigation
% horsepower
% 0-60s

最佳答案

这不是很漂亮,但应该可以做到:

var result = Object.entries(data).reduce((result, [key, value]) => {
key = key.toUpperCase();
if (typeof value === 'object') {
result.push(`${key}:`);
if (Array.isArray(value)) {
value.forEach(item => result.push(item));
} else {
Object.entries(value).forEach(([key, value]) => {
key = key.charAt(0).toUpperCase() + key.slice(1)
result.push(`${key}: ${value}`);
})
}
} else {
result.push(`${key}: ${value}`);
}
return result;
}, []);
var finalResult = result.join("\n");

关于javascript - 嵌套对象的键在格式化和渲染后丢失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59120590/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com