如何将参数作为值或值数组处理

时间:2017-07-21 13:05:07

标签: javascript arrays

我有几种形式的功能:

    this.something = function (which) {
        // One or many.
        if (!Array.isArray(which)) {
            // Normal - just one.
            doSomething(which);
        } else {
            // To all!
            which.forEach(function (thing) {
                // Note the recursion
                something(thing);
            });
        }
    };

有更简洁的方法吗?

3 个答案:

答案 0 :(得分:3)

this.something = function(which) {
    (Array.isArray(which) ? which : [which]).forEach(function(thing) {
        doSomething(thing);
    });
};

答案 1 :(得分:0)

不是真正的粉丝,但你经常会看到这个:

// A function that handles values as a single parameter, or inside an array
var doSomething(x) {
  if (Array.isArray(x)) {
    x.forEach(doSomething);
  } else {
    console.log(x);
  }
}

您可以从doSomething中提取并应用如下的实用程序方法:

var ifArrayForEach = f => x => Array.isArray(x) ? x.forEach(f) : f(x);

var doSomething = x => console.log(x);

var doSomethingArrayOrNot = ifArrayForEach(doSomething);

doSomethingArrayOrNot("Hello world");
doSomethingArrayOrNot(["Hello", "world"]);

再次......我不是一个大粉丝,但有时候它会很有用。我个人只是在打电话前检查一下。在某些时候,你必须知道你正在处理什么数据......

答案 2 :(得分:0)

不确定这是否符合" Tidier"请求您寻找,但您可以随时在try / catch中处理它。

try {
  which.forEach(function (thing) {
    something(thing);
  });
} catch (e) {
  if (e instanceof TypeError) {
    doSomething(which);
  }
}