Javascript 如何在同时检查json密钥对值的forEach循环中格式化重命名json密钥
我最初有以下json失重和力量是复选框值,要么为on,要么为falseJavascript 如何在同时检查json密钥对值的forEach循环中格式化重命名json密钥,javascript,json,Javascript,Json,我最初有以下json失重和力量是复选框值,要么为on,要么为false { name: 'Anders', package: 'Silver', email: 'email@email.com', subject: 'fdsafa', weightLoss: 'on', // or false strength: false, message: 'fdsasfdsdafsdafasdfasd' } 然后,我为每个循环运行以下命令,以将“on”值(或!=false)
{
name: 'Anders',
package: 'Silver',
email: 'email@email.com',
subject: 'fdsafa',
weightLoss: 'on', // or false
strength: false,
message: 'fdsasfdsdafsdafasdfasd'
}
然后,我为每个循环运行以下命令,以将“on”值(或!=false
)更改为键的名称
Object.entries(payLoadReason).forEach(([key, value]) => {
if (value != false) {
payLoadReason[key] = key;
}
});
然后我得到这个格式化的json,如果strength设置为“on”,它的值也会更改为它的键strength
{
name: 'name',
package: 'package',
email: 'email',
subject: 'subject',
weightLoss: 'weightLoss', // or false
strength: false,
message: 'message'
}
下一步我要做的是重命名最初是'on'的任何值的键,并将键更改为reason
,这样我就可以使用如下格式的Json,这样我就可以在发送网格把手模板中迭代它了
{
"data":{
"reasonArray":[
{
"reason":"weightLoss"
},
{
"reason":"strength"
}
]
}
}
手柄杆模板
<ol>
{{#each data.reasonArray}}
<li>{{this.reason}} </li>
{{/each}}
</ol>
不确定这是否正是您想要的,但我觉得您可以使用该方法来实现您的目标:
const normalizedData = Object.values(payLoadReason).reduce((acc, cur) => {
cur.reasons = [];
if(cur.weightLoss === 'on') {
cur.reasons.push('weightLoss');
}
if(cur.strength === 'on') {
cur.reasons.push('strength');
}
return [...acc, cur];
}, []);
console.log(normalizedData);
编辑:现在使用map
:
const normalizedData = Object.values(payLoadReason).map(item => {
item.reasons = [];
if(item.weightLoss === 'on') {
item.reasons.push('weightLoss');
}
if(item.strength === 'on') {
item.reasons.push('strength');
}
return item;
});
console.log(normalizedData);
我不明白你是如何从第二步得到第三步的。“失重”不是一个虚假的值,而“运动”根本不在你的第二步数据中。你能澄清你正在寻找的转换吗?因此,如果我在表格中勾选或不勾选,就会出现错误值。因此,如果WeightLoss不等于false,那么它将更改为与密钥同名。但我想把减肥的关键点改成理性,因为我会有多个复选框。我需要改写一些东西等等。我会更新我的问题。我在上面添加了更多的注释作为粗体项目,希望它能澄清一些问题。我会再看一遍。您是否知道,无论是否选中,复选框的值都不会从“开”更改?这没关系吗?我认为你真的应该在你的车把模板中找到一个不同的循环解决方案。不要使用
reduce
来构建数组,使用map
和/或过滤器
。另外,这在cur
不是对象的情况下似乎不起作用。我在尝试回答您的问题时添加了一个更新,但仍然卡住了,希望它现在更有意义。
const normalizedData = Object.values(payLoadReason).map(item => {
item.reasons = [];
if(item.weightLoss === 'on') {
item.reasons.push('weightLoss');
}
if(item.strength === 'on') {
item.reasons.push('strength');
}
return item;
});
console.log(normalizedData);