将我创建的假数组转换为JavaScript中的实数数组

Cok*_*god 5 javascript javascript-objects

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

var realArray = Array.prototype.slice.call(fakeArray);
Run Code Online (Sandbox Code Playgroud)

但是假如伪造的数组不是由系统创建的,如果假冒阵列只是简单的话:

var fakeArray = { "0": "some value", "1": "another value" };
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我测试了它,使用上面的方法将导致一个空数组.我希望能够像我给出的示例(由我而不是系统创建)将虚拟数组转换为真实数组.在你告诉我从一开始就把假阵列变成一个真正的数组之前,你应该知道我从一个我无法控制的资源中得到假数组.

那么,如何将系统未创建的假数组转换为实数数组呢?

小智 5

如果您的"假阵列"被赋予了.length适当设置的属性,那么您的示例将起作用.

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


"将假阵列变成真正阵列的目的之一就是获得它的长度"

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

var len = Object.keys(fakeArray).length;
Run Code Online (Sandbox Code Playgroud)

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;
    };
}
Run Code Online (Sandbox Code Playgroud)

如果假阵列是"稀疏的",你需要像@Rocket节目这样的解决方案.