コンソール ログに次のオブジェクトが出力されています。
これは 2 つのオブジェクト (それぞれ 1 と 2) の配列であると想定しています。しかし、オブジェクト 1 と 2 に似た形式のオブジェクトを作成し、それをこの配列にプッシュしたかったのですが、どうすればよいでしょうか? これをプッシュしてみましたが、次のようになります。
Object #<Object> has no method 'push'
コンソール ログに次のオブジェクトが出力されています。
これは 2 つのオブジェクト (それぞれ 1 と 2) の配列であると想定しています。しかし、オブジェクト 1 と 2 に似た形式のオブジェクトを作成し、それをこの配列にプッシュしたかったのですが、どうすればよいでしょうか? これをプッシュしてみましたが、次のようになります。
Object #<Object> has no method 'push'
コメントで既に述べたように、これは配列ではなくオブジェクトです(コンストラクター関数はオブジェクトでも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を参照してください。