JavaScript函数可选参数

时间:2018-11-27 15:36:40

标签: javascript node.js

我有一个简单的函数可以更新对象的值。当前,该函数采用3个参数来更新对象。我想要一个可选的第四个参数,该参数将接受对象数组(array)并更改数组中所有对象的值。如果提供了第四个参数,我想忽略其他参数。做这个的最好方式是什么?谢谢

var myObj = {myKey : 0}
var obj1 = {myKey : 0}
var obj2 = {myKey : 0}
var array = [{obj: obj1, key: 'myKey1', value: 1},{obj: obj2, key: 'myKey2', value: 2}]

function changeRule(obj, key, value) {
        obj[key] = value
    },  

changeRule(myObj, 'myKey', 1)

3 个答案:

答案 0 :(得分:2)

检查第四个参数是否未定义以及它是否为数组

{{1}}

答案 1 :(得分:0)

检查它是否适用于您的问题陈述,复制代码并在开发人员控制台中运行,在此处无法正常运行。

var obj1 = {
  myKey: 0
};
var obj2 = {
  myKey: 0
};
var array = [{
  obj: 'obj1',
  key: 'myKey',
  value: 1
}, {
  obj: 'obj2',
  key: 'myKey',
  value: 2
}]

function changeRule(objOrArray, key, value) {
  if (objOrArray !== undefined && Array.isArray(objOrArray)) {
    //code that would change value of all objects according to data in array
    objOrArray.forEach(_obj => {
      eval(_obj.obj)[_obj.key] = _obj.value;
    });
    return;
  } else if (objOrArray !== undefined && key !== undefined && value !== undefined) {
    objOrArray[key] = value;
  } else {
    console.warn('param1 must be an Array, or Object with param2(key) & param3(value)');
  }
  return;
}

changeRule(array);

console.log(obj1, obj2);

注意:我对对象数组的结构进行了更改。 (obj名称应为字符串。)

答案 2 :(得分:0)

这就是我所追求的。感谢您的所有帮助!我从这篇文章中学到了很多。

var myObj = {
      myKey: 0
    }
    var obj1 = {
      myKey1: 0
    }
    var obj2 = {
      myKey2: 0
    }
    var array = [{
      obj: obj1,
      key: 'myKey1',
      value: 1
    }, {
      obj: obj2,
      key: 'myKey2',
      value: 2
    }]
    
    function changeRule() {
            if (arguments.length == 1 && Array.isArray(arguments[0])) {
                arguments[0].forEach(e => {
                    e.obj[e.key] = e.value
                });
              } else if (arguments.length == 3 && typeof arguments[0] == "object" && typeof arguments[1] == "string" && typeof arguments[2] == "number") {
                arguments[0][arguments[1]] = arguments[2]
              } else {
                  return "Unacceptable input parameters"
              }
        }
    console.log(obj1)
    console.log("------------------------")
    changeRule(array);
    console.log(obj1)