2015/11/14

【JavaScript】JSONでもconcatやpushが使いたい

JSONを読み込んで、編集して、出力するというツールをつくっていた。
そこでJSONでもArrayのconcatpushみたいなメソッドが使いたい!!ってなったので、いろいろ試してみた。

ちなみにkeyは可変なものを想定している。(可変じゃなくてもいいけど)

ダメなやつ


以下は、ダメな例。
var json = {};

json['key'] = {'a': 1};
// -> {'key': {'a': 1}}

json['key'] = {'b': 2};
// -> {'key': {'b': 2}}  上書きされる
当たり前だが、上書きされてしまう。

JSONには、pushconcatメソッドもないので自分でメソッドをつくる必要がある。




concat的なモノ


前述のとおり、JSONにはconcatpushもない。
ということで自分でメソッドをつくってみた。
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 件のコメント :

コメントを投稿