我要简化以下代码。
以下代码的作用是即时调用具有不同参数的对象set
的{{1}}方法。
myObject
一种选择是将值保留在数组中,例如
myObject.set("value1", 1);
myObject.set("value2", 1);
myObject.set("value3", 1);
myObject.set("value4", 12);
并重复调用var myArr = [["value1",1], ["value2", 1], ["value3",1], ["value4", 12]];
以获取上述数组的大小。
我当时正在研究通过使用myObject.set
来简化此操作,但是找不到任何合适的方法。 (我尝试了loadash
方法,但无法正常工作
loadash中有任何合适的想法或方法吗?
答案 0 :(得分:2)
我不确定您要达到的目标,但我认为您正在寻找“ Rest参数”
docs:https://developer.mozilla.org/nl/docs/Web/JavaScript/Reference/Functions/rest_parameters
示例:
myObject.set = function(...theArgs){
theArgs.forEach((argument) => {
//Do your logic
console.log(argument)
})
}
myObject.set(["value1",1], ["value2", 1], ["value3",1], ["value4", 12])
答案 1 :(得分:1)
在调用set
时,使用Array.forEach()
迭代数组并spread值(子数组):
const myObject = { set: console.log };
const multiSet = arr => arr.forEach((v) => myObject.set(...v))
const arr = [["value1",1], ["value2", 1], ["value3",1], ["value4", 12]];
multiSet(arr);
使用lodash / fp,您将生成一个函数,用于处理带有_.forEach()
和_.spread()
的数组(lodash也需要_.partialRight()
):
const { forEach, spread } = _;
const myObject = { set: console.log };
const multiSet = forEach(spread(myObject.set.bind(myObject))); // or lodash - partialRight(forEach, spread(myObject.set.bind(myObject)))
const arr = [["value1",1], ["value2", 1], ["value3",1], ["value4", 12]];
multiSet(arr);
<script src='https://cdn.jsdelivr.net/g/lodash@4(lodash.min.js+lodash.fp.min.js)'></script>
答案 2 :(得分:1)
如果您只想对myObject.set
中的每个项目调用myArr
,则不需要lodash,可以使用普通JavaScript
var myArr = [["value1",1], ["value2", 1], ["value3",1], ["value4", 12]];
myArr.forEach(args => myObj.set(args[0], args[1]))
或者,如果参数可以变化,则可以简单地扩展它们:
myArr.forEach(args => myObj.set(...args))
答案 3 :(得分:1)
您还可以编写set
函数来处理多种类型的参数。只是为了灵活性
function MyObject() {
this.map = {};
}
MyObject.prototype.set = function() {
var args = Array.from(arguments);
// var args = Array.prototype.slice.call(arguments, 0);
for(var i = 0; i < args.length; i++) {
if(Array.isArray(args[i])) {
this.map[args[i][0]] = args[i][1];
} else {
this.map[args[i]] = !Array.isArray(args[i+1]) ? args[i++] : undefined;
}
}
}
MyObject.prototype.get = function() {
console.log(this.map);
}
var myObject = new MyObject();
myObject.set("value1", 1, ['value2', 2], 'value3', ['value4', 4]);
console.log(myObject.get());