Javascript 将参数添加到函数中,使其仅在值与数组中的名称匹配时执行
我有一个目标:Javascript 将参数添加到函数中,使其仅在值与数组中的名称匹配时执行,javascript,arrays,Javascript,Arrays,我有一个目标: const oData = { name: 'Hound', weapon: 'sword', likes: 'Chicken, Arya, Revenge', dislikes: 'Fire, Mountain, Lannisters' }; 我将其传递给此函数: fConvertValuesToArrays(obj) { for (const i in obj) { obj[i] = Array.isArray(obj[i])
const oData = {
name: 'Hound',
weapon: 'sword',
likes: 'Chicken, Arya, Revenge',
dislikes: 'Fire, Mountain, Lannisters'
};
我将其传递给此函数:
fConvertValuesToArrays(obj) {
for (const i in obj) {
obj[i] = Array.isArray(obj[i]) ? obj[i] : [obj[i]];
}
return obj;
},
这与将所有值转换为数组时的预期效果一样,但我现在只需要在值与此数组中的任何值匹配时执行:
const aNamesToMatch = [ 'likes', 'dislikes' ];
是否有可能将其应用到函数中,或者我是否需要一个单独的函数用于此函数并在fconVertValuesToArray中调用该函数?
如果是这样,那该怎么办
我试图在三元前添加if语句,但没有按预期工作:
fConvertValuesToArrays(obj) {
for (const i in obj) {
if ( obj.likes || obj.dislikes ) {
obj[i] = Array.isArray(obj[i]) ? obj[i] : [obj[i]];
}
}
return obj;
},
您可以在阵列上使用includes aNamesToMatch。并检查当前密钥是否在该数组中
常数=
名字:'猎犬',
武器:“剑”,
喜欢:“鸡肉,雅利雅,复仇”,
不喜欢:“火,山,兰尼斯特”
};
const aNamesToMatch=['喜欢','不喜欢'];
功能fConvertValuesToArraysobj,按键{
对于obj{
如果关键字为includesi{
obj[i]=Array.isArrayobj[i]?obj[i]:[obj[i]];
}
}
返回obj;
}
logfConvertValuesToArrays{…oData},aNamesToMatch您可以在数组aNamesToMatch上使用includes。并检查当前密钥是否在该数组中
常数=
名字:'猎犬',
武器:“剑”,
喜欢:“鸡肉,雅利雅,复仇”,
不喜欢:“火,山,兰尼斯特”
};
const aNamesToMatch=['喜欢','不喜欢'];
功能fConvertValuesToArraysobj,按键{
对于obj{
如果关键字为includesi{
obj[i]=Array.isArrayobj[i]?obj[i]:[obj[i]];
}
}
返回obj;
}
logfConvertValuesToArrays{…oData},aNamesToMatch进行此更改
if(i == 'likes' || i == 'dislikes')
{
obj[i] = Array.isArray(obj[i]) ? obj[i] : [obj[i]];
}
这将检查键是否为likes/dislikes,并仅在这种情况下创建数组。进行此更改
if(i == 'likes' || i == 'dislikes')
{
obj[i] = Array.isArray(obj[i]) ? obj[i] : [obj[i]];
}
这将检查键是否为likes/dislikes,并仅在这种情况下创建一个数组。您可以只循环一个amestomatch,而不是循环遍历整个对象。将对象中的每个属性更新为数组: 常量aNamesToMatch=[“喜欢”,“不喜欢”], 奥达塔={名字:'Hound',武器:'剑',喜欢:'Chicken,Arya,复仇',不喜欢:'Fire,Mountain,Lannisters'; 功能fConvertValuesToArraysobj,按键{ 密钥的常量密钥{ if!Array.isArrayobj[key] obj[键]=[obj[键]] } 返回obj; }
console.logfConvertValuesToArraysoData,aNamesToMatch您可以通过aNamesToMatch进行循环,而不是通过整个对象进行循环。将对象中的每个属性更新为数组: 常量aNamesToMatch=[“喜欢”,“不喜欢”], 奥达塔={名字:'Hound',武器:'剑',喜欢:'Chicken,Arya,复仇',不喜欢:'Fire,Mountain,Lannisters'; 功能fConvertValuesToArraysobj,按键{ 密钥的常量密钥{ if!Array.isArrayobj[key] obj[键]=[obj[键]] } 返回obj; }
console.logfConvertValuesToArraysoData,anamestomatchi如果知道要转换哪些成员,为什么要在所有成员上循环?仅在成员本身上调用函数如果您知道要转换哪些成员,为什么要在所有成员上循环?只在没有IE支持的情况下对成员本身调用函数也许他想得到这样的结果:[鸡,雅莉,复仇]。。。通过obj[i].split,而不是[obj[i]]我正在使用split,但我首先检查它是否包含,但这不会影响此问题或答案。Thanks@MaheerAli中不支持包含IE@iguypouf谢谢你提供的信息。我不知道。但浏览器支持并不重要,除非OP自己问起。如果没有IE支持,也许他想得到这样的东西:[鸡,雅莉,复仇]。。。通过obj[i].split,而不是[obj[i]]我正在使用split,但我首先检查它是否包含,但这不会影响此问题或答案。Thanks@MaheerAli中不支持包含IE@iguypouf谢谢你提供的信息。我不知道。但是浏览器的支持并不重要,除非OP自己询问。我喜欢这个想法,但大多数时候不会同时有喜欢和不喜欢,因此这可能会向对象发送不必要的数据。@UXCODA您可以先检查该键是否存在:if key in obj&!Array.isArrayobj[key]我喜欢这个想法,但大多数时候不会同时有喜欢和不喜欢的东西,因此这可能会向对象发送不必要的数据。@UXCODA您可以先检查该键是否存在:if key in obj&!Array.isArrayobj[key]