我有一个简单的函数可以更新对象的值。当前,该函数采用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)
答案 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)