そこでJSONでもArrayのconcatやpushみたいなメソッドが使いたい!!ってなったので、いろいろ試してみた。
ちなみにkeyは可変なものを想定している。(可変じゃなくてもいいけど)
ダメなやつ
以下は、ダメな例。
var json = {};
json['key'] = {'a': 1};
// -> {'key': {'a': 1}}
json['key'] = {'b': 2};
// -> {'key': {'b': 2}} 上書きされる
当たり前だが、上書きされてしまう。JSONには、pushもconcatメソッドもないので自分でメソッドをつくる必要がある。
concat的なモノ
前述のとおり、JSONにはconcatもpushもない。
ということで自分でメソッドをつくってみた。
var concatenate(in1, in2) {
var result = i1;
for (var key in in2) {
result[key] = in2[key];
}
return result;
}
var json = {'a': 2};
json['key'] = {'a': 1};
// -> {'key': {'a': 1}}
json['key'] = concatenate(json['key'], {'b': 2, 'c': 3});
// -> {'key': {'a': 1, 'b': 2, 'c': 3}
これでもいいけど、なんかダサい。
Object.prototypeを拡張してpushメソッドをつくる
ということで思い切ってObject.prototypeを拡張してpushをつくってみる。
Object.prototype.push = function (values) {
var result = this;
for (var key in values) {
result[key] = values[key];
}
return result;
};
var json = {};
json['key'] = {'a': 1};
json['key'].push({'b': 2});
// -> {'key': {'a': 1, 'b': 2}};
json['key'].push({'c': 3, 'd': 4});
// -> {'key': {'a': 1, 'b': 2, 'c': 3, 'd': 4}};
こんなカンジ!
参考サイト
prototypeや継承については、ちょっと古いけど「JavaScript: The Good Parts」がオススメ
以上
written by @bc_rikko
0 件のコメント :
コメントを投稿