我有一个对象:
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' ];
是否可以将其用于函数,或者我是否需要一个单独的函数并在 fConvertValuesToArrays
中调用该函数?
如果是这样,那将如何运作?
我试图在三元前添加一个 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;
},
最佳答案
您可以在数组 aNamesToMatch
上使用 includes()
。并检查当前键是否在该数组内。
const oData = {
name: 'Hound',
weapon: 'sword',
likes: 'Chicken, Arya, Revenge',
dislikes: 'Fire, Mountain, Lannisters'
};
const aNamesToMatch = [ 'likes', 'dislikes' ];
function fConvertValuesToArrays(obj,keys) {
for (const i in obj) {
if (keys.includes(i)) {
obj[i] = Array.isArray(obj[i]) ? obj[i] : [obj[i]];
}
}
return obj;
}
console.log(fConvertValuesToArrays({...oData},aNamesToMatch))
关于javascript - 将参数添加到函数以仅在值与数组中的名称匹配时执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56234192/