将javascript对象转换为数组。 如何?

我做了这个沙箱测试:

  whatever  function myLittleTest() { var obj, arr, armap; arr = [1, 2, 3, 5, 7, 11]; obj = {}; obj = arr; alert (typeof arr); alert (typeof obj); // doesn't work in IE armap = obj.map(function (x) { return x * x; }); alert (typeof armap); } myLittleTest();      

我意识到我可以使用jQuery的函数$ .map来使这行代码工作,但是,我在javascript数据类型上缺少什么?

我很确定这不是类型问题,因为IE在IE 9之前没有Array.map()函数。请参阅http://msdn.microsoft.com/en-us/library/k4h76zbx( v = VS.85).aspx获取支持的函数列表。 有关IE 9中Array.map()函数的说明,请参见http://msdn.microsoft.com/en-us/library/ff679976(v=VS.94).aspx 。

如果你有一个类似数组的对象(比如arguments ),你可以通过调用Array.prototype.slice.call(o)得到一个真正的数组。

 var o = {0:"a", 1:'b', length:2}; var a = Array.prototype.slice.call(o); 

a将是["a", "b"] 。 这只有在您具有正确设置的length属性时才能正常工作。

我觉得你太努力了……

使用jQuery(或类似的库)最简单

对于这个对象:

 var obj = {a: 1, b: 2, c: 3}; 

数组有一个固定的密钥系统,所以对于上面的对象,你必须扔掉密钥(a,b,c)或值(1,2,3)

所以这个:

 var arr = $.map(obj, function (value, key) { return value; }); 

或这个:

 var arr = $.map(obj, function (value, key) { return key; }); 

一年前现在,但我不妨提一下jQuery的makeArray函数http://api.jquery.com/jQuery.makeArray/

使用for循环实现最大的浏览器兼容性。

在Javascript中,所有数组都是对象,但并非所有对象都是数组。 看看这个Perfection Kills页面 ,它描述了如何检查某些东西是一个数组。

要检查数组,可以使用Object.prototype.toString.call(theObject) 。 这将返回作为[object Array]的对象的[object Array]和不是Array的对象的[object Object] (参见下面的示例):

  function myLittleTest() { var obj, arr, armap, i; // arr is an object and an array arr = [1, 2, 3, 5, 7, 11]; obj = {}; // obj is only an object... not an array alert (Object.prototype.toString.call(obj)); // ^ Output: [object Object] obj = arr; // obj is now an array and an object alert (Object.prototype.toString.call(arr)); alert (Object.prototype.toString.call(obj)); // ^ Output for both: [object Array] // works in IE armap = []; for(i = 0; i < obj.length; ++i) { armap.push(obj[i] * obj[i]); } alert (armap.join(", ")); } // Changed from prueba(); myLittleTest(); 

jsFiddle示例

在许多其他用于操作对象和数组的小实用程序中,Underscore.js提供了一个toArray(obj)辅助方法。 这里的文档: http : //underscorejs.org/#toArray

从文档的编写方式来看,这并不是很明显,但它就像任意对象上的魅力一样。 给定对象时,它会迭代值并返回仅包含这些值的列表。