3

組み合わせたい2つのjsonオブジェクトがあります。concatと機能を使ってみmergeましたが、思い通りの結果になりませんでした。どんな助けでもいただければ幸いです。

var jason1 = 
{
  "book1": {
    "price": 10,
    "weight": 30
  },
  "book2": {
    "price": 40,
    "weight": 60
  }
};

これはもう1つのオブジェクトです

var jason2 =
{
  "book3": {
    "price": 70,
    "weight": 100
  },
  "book4": {
    "price": 110,
    "weight": 130
  }
};

これが私が欲しいものです:

var jasons =
{
  "book1": {
    "price": 10,
    "weight": 30
  },
  "book2": {
    "price": 40,
    "weight": 60
  }
  "book3": {
    "price": 70,
    "weight": 100
  },
  "book4": {
    "price": 110,
    "weight": 130
  }
};
4

3 に答える 3

3

Object.extendPrototype.jsフレームワークのメソッドのソースを参照してください。

https://github.com/sstephenson/prototype/blob/master/src/prototype/lang/object.js#L88

function extend(destination, source) {
  for (var property in source) {
    destination[property] = source[property];
  }
}

使用法は…</p>

extend(jason1, jason2);

これで、オブジェクトjason1に必要なものが正確に含まれます。

于 2012-10-26T22:20:00.597 に答える
0

それらを手動で繰り返す必要があります。

var both = [json1, json2],
    jasons = {};


for (var i=0; i < both.length; i++) {
  for (var k in both[i]) {
    if(both[i].hasOwnProperty(k)) {
       jasons[k] = both[i][k];
    }
  }
}

これが実用的なフィドルです。ただし、重複するキーがある場合に何が起こるかを考えたい場合があります。たとえばbook3、両方のjsonオブジェクトに存在する場合はどうなりますか。私が提供したコードでは、2番目の値が常に優先されます。

于 2012-10-26T22:22:34.927 に答える
0

これが1つの方法ですが、もっとエレガントな解決策があると確信しています。

var jason1 = {
    "book1": {
        "price": 10,
        "weight": 30
    },
    "book2": {
        "price": 40,
        "weight": 60
    }
};
var jason2 = {
    "book3": {
        "price": 70,
        "weight": 100
    },
    "book4": {
        "price": 110,
        "weight": 130
    }
};
var jasons = {};
var key;
for (key in jason1) {
    if (jason1.hasOwnProperty(key) && !(jasons.hasOwnProperty(key))) {
        jasons[key] = jason1[key];
    }
}
for (key in jason2) {
    if (jason2.hasOwnProperty(key) && !(jasons.hasOwnProperty(key))) {
        jasons[key] = jason2[key];
    }
}
console.log(jasons);
于 2012-10-26T22:24:25.477 に答える