javascript - 将参数添加到函数以仅在值与数组中的名称匹配时执行

标签 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]) ? 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/

相关文章:

java - 使用java中的scanner类将值插入到两个数组中

c - 声明一个结构数组

javascript - Gatsby 客户端重定向到外部 URL 在 Netlify 上不起作用

javascript - 使用 Redux 表单,如何仅在任何字段发生更改时才提交?

javascript - Knockout JS 值未显示/绑定(bind)/更新但可通过 ko.toJS($data).value

javascript - 第 4 模式阻止 NavBar 下拉菜单运行?

php从两个数组中获取相同的索引值(在foreach之外)

javascript - 使用带有 JavaScript/ES6 的 for 循环创建一个获取 promise 的数组,可以通过 Promise.all 读取?

java - 数组 [i] = java.lang.IndexOutOfBoundsException : Invalid array range 10 to 10

javascript - React - 表单提交触发附加到表单父级的 onSubmit