从不同变量类型获得数组的有效方法

时间:2018-04-24 10:03:52

标签: javascript performance optimization ecmascript-6

这不是一个真正的问题,但我喜欢提高我的JavaScript / ES6技能。

我正在尝试找到一种更有效的方法来永远拥有一个数组,无论我的传入变量只有一个值还是一个数组。

我目前正在做的是:

var inp;

// just for the showcase
if (Math.random() > 0.5) {
  inp = 'foo';
} else {
  inp = ['foo', 'bar'];
}

// this is what I want to optimize
if (Array.isArray(inp)) {
  outp = inp;
} else {
  outp = [inp];
}

console.log(outp);

谈论只是以任何代价缩短代码,但效率和优雅。

4 个答案:

答案 0 :(得分:4)

您可以使用isArray

跳过此concat项检查
const outp = [].concat(inp);

它总会给你一个包含元素的数组(不是嵌套的):

[].concat('foo')
// ['foo']

[].concat(['foo'])
// ['foo']

答案 1 :(得分:3)

测试怎么样?以下是jsperf:https://jsperf.com/dynamic-array-creation

enter image description here

instanceof似乎是最有效的方式。

答案 2 :(得分:0)

许多方法都是可能的。取决于你没有发现的准确度。一个简单的例子:

var outp = Array.isArray(inp) ? inp : in[];

这只不过是代码的简写。

你应该问自己这是否合适。如果你有一个期望一个数组但得到一个字符串作为输入的函数。它应该继续吗?许多接口为此提供了不同的显式方法。例如:add(array)addOne(string)

答案 3 :(得分:0)

如果{2}小于concat

,您可以[]清空数组Math.random
0.5