5

我知道在 JavaScript 中有时系统会创建一个假数组,这意味着它实际上是一个对象而不是 Array 的实例,但仍然具有数组的部分功能。例如,您在函数中获得的 arguments 变量是系统创建的假数组。在这种情况下,我知道要将它变成一个真正的数组,你可以这样做:

var realArray = Array.prototype.slice.call(fakeArray);

但是如果系统没有创建假数组怎么办,如果 fakeArray 只是:

var fakeArray = { "0": "some value", "1": "another value" };

在这种情况下,我对其进行了测试,使用上面的方法将导致一个空数组。我希望能够将我给出的示例中的假数组(由我而不是由系统创建)变成一个真正的数组。在你告诉我从一开始就简单地将假数组变成真正的数组之前,你应该知道我是从我无法控制的资源中获取假数组的。

那么,如何将不是系统创建的假数组变成真正的数组呢?

4

3 回答 3

5

如果为您的“假数组”提供了.length适当设置的属性,您的示例将起作用。

这在某些旧版本的 Internet Explorer 中不起作用。


“将假数组变成真实数组的目的之一是获取它的长度”

如果您想要对象中的属性数量,请使用Object.keys...

var len = Object.keys(fakeArray).length;

Object.keys为旧版浏览器填充垫片,您可以执行此操作...

if (!Object.keys) {
    Object.keys = function(o) {
        var keys = [];
        for (var k in o)
            if (o.hasOwnProperty(k))
                keys.push(k)
        return keys;
    };
}

如果假数组是“稀疏的”,您将需要像 @Rocket 节目这样的解决方案。

于 2012-07-30T14:02:00.423 回答
2

您可以简单地遍历“数组”并将值保存到真实数组中。

var fakeArray = { "0": "some value", "1": "another value" };
var realArray = [];

for(var i in fakeArray){
    realArray[i] = fakeArray[i];
}
于 2012-07-30T14:02:14.487 回答
0

您可以迭代对象属性,同时将所需的属性推送到新数组:

var array = [];

for (var i in fakeArray) if (fakeArray.hasOwnProperty(i)) {
    array.push(fakeArray[i]);
}
于 2012-07-30T14:17:42.787 回答