2013-03-05 94 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