我有一个json让我们说json 1
[
{
"id": "123",
"testname": "test123",
"name": "John Doe",
"active": true,
"type": "test6"
}
{
"id": "456",
"testname": "test564",
"name": "Ship Therasus",
"active": true,
"type": "test7"
}
.... some 100 entries
]
和json 2有点像下面
[
{
"id": "123",
"country": "USA",
"state": "KA",
"age": 24,
"group": "g1"
}
{
"id": "456",
"country": "UK",
"state": "MA",
"age": 28,
"group": "G2"
}
...... 100 entries
]
现在Id是json1和json2之间的常量我希望制作一个结果json,如下所示调用json3.I想要匹配id并从json2获取country和state并附加到json 1.我不看代码,但如果我做暴力,它需要100 * 100,因此性能问题。有没有更好的方法来解决这个问题?
[
{
"id": "123",
"testname": "test123",
"name": "John Doe",
"active": true,
"type": "test6",
"country":"USA",
"state":"KA"
}
{
"id": "456",
"testname": "test564",
"name": "Ship Therasus",
"active": true,
"type": "test7",
"country":"UK",
"state":"MA"
}
]
答案 0 :(得分:1)
解决这个问题的最佳方法是O(size(json1 || json2)),因为你必须完全通过所有的json列表来遍历所有的ID。如果您有一个恒定的时间查找(如通过ID键入的hashmap),您将能够提取有关该特定ID的信息。老实说,我不熟悉json建议使用的数据结构,但我知道在Java中,hashmaps是一种常用的常量时间查找。最好的方法是:
虽然这个答案有点模糊,但我希望它有所帮助。
答案 1 :(得分:1)
在没有做出任何假设的情况下,我无法想出任何基于给定信息避免O(n ^ 2)复杂性的方法。
但是,如果您的数组已经按对象ID排序,则可以通过迭代数组来加快它的速度。
var json3 = [];
for(var i = 0; i < json1.length; i++) {
json3.push($.extend({}, json1[i], json2[i]));
}
如果您可以控制数据结构,则由id键入的对象比数组更容易使用: e.g。
json1 = {
"123": {"testname": "test123", ...},"456": {...}
}
然后你的代码就是
var json3 = {};
for(var id in json1) {
json3[id] = $.extend({}, json1[id], json2[id]));
}