5

JavaScript では、システムが偽の配列を作成することがあることを私は知っています。つまり、実際にはオブジェクトであり、配列のインスタンスではありませんが、配列の機能の一部はまだ持っています。たとえば、関数内で取得する引数変数は、システムによって作成された偽の配列です。この場合、それを実際の配列に変換するには、次のことができることを知っています。

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

しかし、フェイク配列がシステムによって作成されたものではない場合、fakeArray が単に次のようなものだったとしたらどうでしょうか。

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

この場合、私がテストしたところ、上記の方法を使用すると空の配列になります。私が与えた例のような偽の配列(システムではなく私が作成したもの)を実際の配列に変換できるようにしたいのです。そして、最初から偽の配列を実際の配列にするように言う前に、私が制御できないリソースから偽の配列を取得していることを知っておく必要があります。

では、システムによって作成されていない偽の配列を実際の配列に変換するにはどうすればよいでしょうか?

4

3 に答える 3

5

.length「偽の配列」に適切に設定されたプロパティが与えられている場合、あなたの例は機能します。

これは、一部の古いバージョンの Internet Explorer では機能しません。


「偽の配列を実際の配列に変換する目的の 1 つは、その長さを取得することです」

オブジェクト内のプロパティの数が必要な場合は、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 に答える