遍历给定参数的方法

时间:2019-05-14 11:42:05

标签: javascript angularjs lodash

我要简化以下代码。

以下代码的作用是即时调用具有不同参数的对象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中有任何合适的想法或方法吗?

4 个答案:

答案 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());