Javascript 多元化包含数组的对象键
我得到了一个存储钥匙信息的对象。我需要将包含数组的键更改为复数,例如:Javascript 多元化包含数组的对象键,javascript,Javascript,我得到了一个存储钥匙信息的对象。我需要将包含数组的键更改为复数,例如: { name: 'Tom', job: ['writing katas', 'marking'], favouriteShop: [ "Paul's Donkey University", "Shaq's Taxidermy Shack", "Sam's Pet Shop" ] }; 应该是: { name: 'Tom', jobs: ['writing
{
name: 'Tom',
job: ['writing katas', 'marking'],
favouriteShop: [
"Paul's Donkey University",
"Shaq's Taxidermy Shack",
"Sam's Pet Shop"
]
};
应该是:
{
name: 'Tom',
jobs: ['writing katas', 'marking'],
favouriteShops: [
"Paul's Donkey University",
"Shaq's Taxidermy Shack",
"Sam's Pet Shop"
]
}
有人能帮忙吗?你可以用
reduce
:
const obj={
名字:“汤姆”,
工作:[“写卡塔”,“标记”],
精品店:[
“保罗的驴子大学”,
“沙克的标本室”,
“山姆宠物店”
]
};
const result=Object.keys(obj).reduce((acc,key)=>{
if(Array.isArray(obj[key])){
acc[`${key}s`]=obj[key]
}否则{
acc[键]=obj[键]
}
返回acc
}, {})
控制台日志(结果)代码>您可以使用reduce
:
const obj={
名字:“汤姆”,
工作:[“写卡塔”,“标记”],
精品店:[
“保罗的驴子大学”,
“沙克的标本室”,
“山姆宠物店”
]
};
const result=Object.keys(obj).reduce((acc,key)=>{
if(Array.isArray(obj[key])){
acc[`${key}s`]=obj[key]
}否则{
acc[键]=obj[键]
}
返回acc
}, {})
控制台日志(结果)代码>
const数据={
名字:“汤姆”,
工作:[“写卡塔”,“标记”],
精品店:[
“保罗的驴子大学”,
“沙克的标本室”,
“山姆宠物店”
]
};
const newData={};
用于(输入数据){
const newKey=Array.isArray(data[key])&&data[key].length>1?`${key}s`:key;
newData[newKey]=数据[key];
}
console.log(newData)
const数据={
名字:“汤姆”,
工作:[“写卡塔”,“标记”],
精品店:[
“保罗的驴子大学”,
“沙克的标本室”,
“山姆宠物店”
]
};
const newData={};
用于(输入数据){
const newKey=Array.isArray(data[key])&&data[key].length>1?`${key}s`:key;
newData[newKey]=数据[key];
}
console.log(newData)
您不能更改原始输出的生成方式吗?对输出进行变异似乎过于复杂,因此更改附加了s的键可能很容易实现,但转换为精确的复数可能很棘手。你想要精确的复数吗?你不能改变原始输出的生成方式吗?对输出进行变异似乎过于复杂,因此更改附加了s的键可能很容易实现,但转换为精确的复数可能很棘手。你想要精确的复数吗?这是相当昂贵的(在每个键上进行acc
的浅拷贝),为什么不简单地在一个对象上创建随时间返回的新键呢?这样可以避免改变原始对象。当然,但之后不需要所有的浅拷贝,第一个acc已经是一个新对象,因为您为reduce函数指定了一个种子hh,现在我明白了您的意思。我将更新答案。这相当昂贵(在每个键上进行acc
的浅拷贝),为什么不在一个对象上创建随时间返回的新键呢?这可以避免改变原始对象。当然,但之后不需要所有的浅拷贝,第一个acc已经是一个新对象,因为您为reduce函数指定了一个种子hh,现在我明白了您的意思。我会更新答案。