Javascript 如何确定对象中的键是否具有值数组
我试图解决这个问题: 在此函数中,将为您提供一个对象。该对象正在存储有关键的信息。例如Javascript 如何确定对象中的键是否具有值数组,javascript,arrays,json,object,Javascript,Arrays,Json,Object,我试图解决这个问题: 在此函数中,将为您提供一个对象。该对象正在存储有关键的信息。例如 { name: 'Tom', job: ['writing katas', 'marking'], favouriteShop: [ "Paul's Donkey University", "Shaq's Taxidermy Shack", "Sam's Pet Shop" ] }; 然而,在某些情况下,密钥
{
name: 'Tom',
job: ['writing katas', 'marking'],
favouriteShop: [
"Paul's Donkey University",
"Shaq's Taxidermy Shack",
"Sam's Pet Shop"
]
};
然而,在某些情况下,密钥的名称非常糟糕。良好的命名约定告诉我们,包含数组的键应命名为复数
此函数应返回一个新对象,该对象是输入的副本,但任何键都包含多元化数组(末尾添加了一个“s”)
我的尝试:
let cloneObj = Object.assign({},obj);
let arrayOfKeys = Object.keys(obj);
if(arrayOfKeys.length === 3){
let plural = arrayOfKeys[1]+"s"
cloneObj[plural] = cloneObj[arrayOfKeys[1]];
delete cloneObj[arrayOfKeys[1]];
}
return cloneObj;
这里我总是指向对象的第二个索引键位置。但这里的情况并非如此,带有数组值的键被随机放置在对象中。您当前的方法存在一些问题,主要的问题是它不处理动态数据,而是尝试让代码为给定的一个对象工作。
您可能会发现从头开始创建新对象比使用
object.assign()
克隆现有对象,然后使用delete
修改现有对象更容易。取而代之,您可以通过抓取对象的名称从头开始构建一个新对象,这将为您提供一个[[key,value],…]
对数组,其形式如下:
[
["name", "Tom"],
["job", ["writing katas", "marking"]],
["favouriteShop", ["Paul's Donkey University", "Shaq's Taxidermy Shack", "Sam's Pet Shop"]]
]
然后可以使用映射该键值对数组,以转换每个内部键值对。要转换,您可以首先检查密钥是否需要复数,方法是检查:
“s”
“s”
(这是使用下面的复数化功能完成的。一旦您修改了内部[键值]
pair Array,您可以通过将映射函数包装为类似这样的调用,将其转换回对象:
const inp={name:'Tom',job:['writing katas','marking'],最喜欢的商店:[“保罗的驴子大学”,“沙克的标本室”,“山姆的宠物店];
const pluralize=str=>str+(str.endsWith('s')?“'s');
const res=Object.fromEntries(Object.entries(inp.map(
([key,val])=>[Array.isArray(val)?复数(key):key,val])
);
console.log(res);
我可以建议这个选项,如果对象的键还没有s
结尾,它会将s
添加到对象的键中
constoldobj={name:'Tom',job:['writing katas','marking'],最喜欢的商店:[“保罗的驴子大学”,“沙克的标本室”,“山姆的宠物店”]}
常量betterKeyName=(对象)=>{
常量obj={};
Object.entries(Object.forEach)([key,value])=>{
if(数组&&!字符串(key).endsWith('s')的值实例){
obj[`${key}s`]=值
}否则{
obj[键]=值
}
});
返回obj;
}
const newObj=更好的关键字名称(oldObj);
console.log(newObj)
您能分享您在具体操作中遇到的问题吗/请分享您的尝试吗?我必须解决一个给定对象的问题…..对象中的一个键具有数组作为值,因此我必须通过在键名称的最后添加“s”来多元化该键的名称。@IbrahimAhmed您能分享您的尝试吗?让cloneObj=object.assign({},obj);let arrayOfKeys=Object.keys(obj);if(arrayOfKeys.length==3){let mulral=arrayOfKeys[1]+“s”cloneObj[mulral]=cloneObj[arrayOfKeys[1]];delete cloneObj[arrayOfKeys[1]];}return cloneObj;
我已经试过了,但这是一个硬代码,我假设带有数组值的键总是放在索引1中。但这不是带有数组值的键随机放在对象中的情况。
[
["name", "Tom"],
["job", ["writing katas", "marking"]],
["favouriteShop", ["Paul's Donkey University", "Shaq's Taxidermy Shack", "Sam's Pet Shop"]]
]