3

我有 2 个想要组合的 json 对象。我尝试使用concatmerge功能,但结果不是我想要的。任何帮助,将不胜感激。

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 =
{
  "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.extend从 Prototype.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 对象中都存在会发生什么。使用我提供的代码,第二个中的值总是获胜。

于 2012-10-26T22:22:34.927 回答
0

这是一种方法,尽管我确信还有更优雅的解决方案。

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 回答