[英]Javascript merge and rename Json objects
Simple problem here: 2 Json objects I would like to merge, while renaming the second. 这里的简单问题是:我想合并两个Json对象,同时重命名第二个。
First Array (obj1): 第一个数组(obj1):
[
{
"name":"Metric 1",
"value":33731487,
},
{
"name":"Metric 2",
"value":11252893,
}
]
Second Array (obj2): 第二个数组(obj2):
[
{
"name":"Metric 1",
"value":118181851,
},
{
"name":"Metric 2",
"value":15151,
}
]
Desired Result: 所需结果:
[
{
"name":"Metric 1", // Obj1
"value":118181851, // Obj1
"name_compare":"Metric 1", // Obj2
"value_compare":148748, // Obj2
},
{
"name":"Metric 2", // Obj1
"value":15151, // Obj1
"name_compare":"Metric 2", // Obj2
"value_compare":741178, // Obj2
}
]
So I tried: 所以我尝试了:
Renaming the Obj2 (works ok): 重命名Obj2(可以正常运行):
function JsonRename(obj) {
var output = {};
for (i in obj) {
if (Object.prototype.toString.apply(obj[i]) === '[object Object]') {
output[i] = JsonRename(obj[i]);
} else {
output[i+'_compare'] = obj[i];
}
}
return output;
}
I've then tried to merge them by using: 然后,我尝试使用以下方法合并它们:
function JsonMergeCompare(obj1, obj2 ) {
var renamed_obj2 = JsonRename(obj2);
var output = {};
for (i in obj1) {
output[i] = obj1[i];
output[i] = renamed_obj2[i];
}
return output;
}
My problem is most certainly in the function above, because it only returns the obj2 (which makes sense as I'm iterating over output[i] twice) but how can I get in and change only the key -> values? 我的问题最肯定是在上面的函数中,因为它只返回obj2(这在我对output [i]进行两次迭代时很有意义),但是我如何才能进入并仅更改键->值?
I suggest you to define an Array.zip() function like this: 我建议您像这样定义一个Array.zip()函数:
Array.zip = function(left, right, combinerFunction) {
var counter, results = [];
for(counter = 0; counter < Math.min(left.length, right.length); counter++) {
results.push(combinerFunction(left[counter], right[counter]));
}
return results;
};
And then use it to zip the arrays together like this: 然后使用它将数组压缩在一起,如下所示:
var resultArray = Array.zip(array1, array2, function(one, two) {
return {
name: one.name,
value: one.value,
name_compare: two.name,
value_compare: two.value
};
});
As you say the function is the problem. 正如您所说的,功能就是问题。
You need two for loops one per object as follows: 每个对象需要两个for循环,如下所示:
function JsonMergeCompare(obj1, obj2 ) {
var renamed_obj2 = JsonRename(obj2);
var output = {};
for (i in obj1)
output[i] = obj1[i];
for (i in renamed_obj2)
output[i] = renamed_obj2[i];
return output;
}
try this one, I'm sure what is really you want but I just based my answer in your desired output 试试这个,我确定您真正想要的是什么,但是我只是将答案基于您想要的输出
<script> //First Array (obj1) var _obj1=[ { "name":"Metric 1", "value":33731487, }, { "name":"Metric 2", "value":11252893, } ]; //Second Array (obj2): var _obj2=[ { "name":"Metric 1", "value":118181851, }, { "name":"Metric 2", "value":15151, }, { "name":"Metric 3", "value":123, }, ]; function jsonRename(obj1,obj2){ var out=[]; var keys={}; var ctr=0; var indx=0; for(v in obj1){ if(typeof(obj1[v].name)!="undefined" ){ var n=obj1[v].name; if( typeof(keys[n])=="undefined"){ out.push(obj1[v]); keys[n]=out.length-1; } for(v1 in obj2){ try{ if(n==obj2[v1].name){ ctr++; out[keys[n]]["name_compare"+ctr]= obj2[v1].name; out[keys[n]]["value_compare"+ctr]= obj2[v1].value; } }catch(e){} } } } return out; } var out=jsonRename(_obj1,_obj2); </script>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.