Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将参数添加到函数中,使其仅在值与数组中的名称匹配时执行_Javascript_Arrays - Fatal编程技术网

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]