-5

コンソール ログに次のオブジェクトが出力されています。

ここに画像の説明を入力

これは 2 つのオブジェクト (それぞれ 1 と 2) の配列であると想定しています。しかし、オブジェクト 1 と 2 に似た形式のオブジェクトを作成し、それをこの配列にプッシュしたかったのですが、どうすればよいでしょうか? これをプッシュしてみましたが、次のようになります。

 Object #<Object> has no method 'push' 
4

2 に答える 2

1

コメントで既に述べたように、これは配列ではなくオブジェクトです(コンストラクター関数はオブジェクトでもObjectあり__proto__ます)。

数値的に連続したキーがある場合は、オブジェクトを配列に保持するのが最善です。そうすれば、それに.push新しい値を入れることができます。

ただし、それが不可能で、キーを増やした新しいオブジェクトを追加したい場合は、最初に現在の最大キーを見つける必要があります。例えば:

function get_max_key(obj) {
    return Math.max.apply(Math, Object.keys(obj));
}

obj[get_max_key(obj) + 1] = new_value;

または、オブジェクト内の値の数を数えることもできます (実際の状況とキーの値によって異なります)。

function get_number_of_properties(obj) {
    return Object.keys(obj).length;
}

キーを抽出して毎回処理することを避けるために、現在の長さまたは最大のキーを追加の変数に保持するか、オブジェクトのプロパティとして保持できます。たとえば、lengthプロパティをオブジェクトに割り当てて、配列のようなオブジェクトにすることができます。

var obj = {
    length: 0
};

利点は、そのオブジェクトに多くの (すべてではないにしても) 配列メソッドを適用できることです。Array.prototype.push新しいプロパティを追加するために使用することもできます:

[].push.call(obj, new_value);

プロパティが更新lengthされます。

ただし、この場合も、代わりに配列を直接使用できます。


オブジェクトの詳細については、 MDN - Working with Objectsを参照してください。

于 2013-06-11T12:14:08.387 に答える