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

将javascript对象强制转换为数组。如何?,javascript,jquery,Javascript,Jquery,我做了这个沙箱测试: <html> <head> <title>whatever</title> <script type="text/javascript"> function myLittleTest() { var obj, arr, armap; arr = [1, 2, 3, 5, 7, 11];

我做了这个沙箱测试:

<html>
    <head>
        <title>whatever</title>
        <script type="text/javascript">
            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();
        </script>
    </head>
    <body>
    </body>
</html>

无论什么
函数myLittleTest(){
var obj、arr、armap;
arr=[1,2,3,5,7,11];
obj={};
obj=arr;
警报(arr类型);
警报(obj类型);
//在IE中不起作用
armap=obj.map(函数(x){return x*x;});
警报(armap类型);
}
myLittleTest();

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

我很确定这不是类型问题,因为IE直到IE 9才有
Array.map()
函数。有关支持的函数的列表,请参阅。有关IE 9中的
Array.map()
函数的说明,请参阅。

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

在Javascript中,所有数组都是对象,但并非所有对象都是数组。请看,它描述了如何检查某个对象是否是数组

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

函数myLittleTest()
{
var obj、arr、armap、i;
//arr是一个对象和一个数组
arr=[1,2,3,5,7,11];
obj={};//obj只是一个对象…不是数组
警报(Object.prototype.toString.call(obj));
//^输出:[对象]
obj=arr;//obj现在是一个数组和一个对象
警报(Object.prototype.toString.call(arr));
警报(Object.prototype.toString.call(obj));
//^两者的输出:[对象数组]
//在IE工作
armap=[];
对于(i=0;i

如果您有一个类似数组的对象(例如,
参数),您可以通过调用
array.prototype.slice.call(o)
从中获得一个真正的数组


a
将是
[“a”,“b”]
。只有在正确设置了
length
属性的情况下,这才可以正常工作。

一年前,但我还可以提到jQuery的makeArray函数

我认为您太努力了

使用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; });

在许多其他用于操作对象和数组的小实用程序中,underline.js提供了
toArray(obj)
helper方法。此处的文档:


从文档的编写方式来看,这并不完全明显,但它在任意对象上的作用就像一个符咒。当给定一个对象时,它会对这些值进行迭代,并返回一个仅包含这些值的列表。

我不太确定您想要实现什么。是否需要一个数组,其中每个索引表示来自和对象的属性?或者一个对象,其中每个属性表示数组中的一个值?对于数组,您总是可以从
typeof
中获取
object
。数组只是具有数字属性、一些额外方法和神奇的
length
属性的对象。清楚地表明,
Array.map()
函数是在IE 9.+1中引入的-这也是制作
参数
数组副本的好方法,因为
arguments.slice()
不适用于
参数
。。。而且,
=参数
没有帮助。这方面的简写是
[].slice.call()
。这是我从expressjs框架中学到的。不过,每次需要从原型调用方法时都创建一个新数组有点浪费。生成的数组是否只包含符合
myobject.hasOwnProperty(mykey)
?@ThorCaller:我不这么认为,但我认为它只会复制数值属性。如果您从原型继承数字属性,我认为您太聪明了。
var t={f:4,h:5};var u=$.makeArray(t)u将是一个包含一个元素的数组:对象t。我怀疑这就是这里需要的?哇,詹尼斯,你说得对。这到底是什么意思?为什么不直接说[t]?!?Janis,我花了一些时间通过调试器实现了这一点…你说得对。这个方法将删除空的“属性”。在我的例子中,我需要数组计数和项集合完全相等
var arr = $.map(obj, function (value, key) { return value; });
var arr = $.map(obj, function (value, key) { return key; });