2013-03-05 98 views
0

我期待从变量中获取数组。如果不是已经是一个数组我想回到与变量作为唯一entry.Example一个新的数组:从javascript中获取数组变量

toArray('test'); // => ["test"] 
toArray(['test']); // => ["test"] 

我的实际工作的代码是:

var toArray; 

toArray = function(o) { 
    if (Array.isArray(o)) { 
    return o.slice(); 
    } else { 
    return [o]; 
    } 
}; 

我想知道有一个更好的方法(例如native或者underscore.js)。

在Ruby中,你可以这样做:

Array('test') # => ["test"] 
Array(['test']) # => ["test"] 
+0

你的例子使用一个字符串,而不是一个对象。你的问题说“如果它不是[数组]”,但无论返回一个新的数组。你真正想要的是什么? – RobG 2013-03-05 01:20:14

+0

它可以是任何它不是一个数组:对象,字符串,整数,... – TimPetricola 2013-03-05 01:24:36

回答

2

只需使用.concat()

[].concat("test"); // ["test"] 
[].concat(["test"]); // ["test"] 

阵列将被展平到新的阵列。其他任何东西都将被简单地添加。

+0

正是我在找的东西。非常感谢! – TimPetricola 2013-03-05 01:19:06

+0

不客气。 – 2013-03-05 01:20:56

1
function toArray(o) { 
    return Array.isArray(o) ? o.slice() : [o]; 
}; 
+0

是的,它会工作,但它实际上是完全相同的代码,只是写成三元。我正在寻找其他的东西,比如单一的方法。但我真的怀疑它存在:) – TimPetricola 2013-03-05 01:10:35

+0

你真的不是真的将一个对象转换为一个数组,它看起来像你只是返回一个新的数组,如果它已经是一个数组,如果它是一个字符串,所以我不认为有一个内置的函数,不需要类型检查和两种不同的方法,如上所述。 – adeneo 2013-03-05 01:12:23

+0

是的,你说得对,我没有真正转换它。我编辑了这个问题,使之更加清晰。谢谢:) – TimPetricola 2013-03-05 01:17:17

0

我相信你可以切片它:

var fooObj = {0: 123, 1: 'bar', length: 2}; 
var fooArr = Array.prototype.slice.call(fooObj); 

演示:http://jsfiddle.net/sh5R9/

+0

你不能。铬至少不是。 – lordvlad 2013-03-05 01:07:40

+0

对于数字键,当然 - '{0:123,1:'bar',length:2}'。但是,我认为OP在'Array'之后 - 包装不止是直接转换。 – 2013-03-05 01:08:33

+0

是真的,它可以用于数字键。 – lordvlad 2013-03-05 01:11:59