[英]Javascript merge and rename Json objects
這里的簡單問題是:我想合並兩個Json對象,同時重命名第二個。
第一個數組(obj1):
[
{
"name":"Metric 1",
"value":33731487,
},
{
"name":"Metric 2",
"value":11252893,
}
]
第二個數組(obj2):
[
{
"name":"Metric 1",
"value":118181851,
},
{
"name":"Metric 2",
"value":15151,
}
]
所需結果:
[
{
"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
}
]
所以我嘗試了:
重命名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;
}
然后,我嘗試使用以下方法合並它們:
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;
}
我的問題最肯定是在上面的函數中,因為它只返回obj2(這在我對output [i]進行兩次迭代時很有意義),但是我如何才能進入並僅更改鍵->值?
我建議您像這樣定義一個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;
};
然后使用它將數組壓縮在一起,如下所示:
var resultArray = Array.zip(array1, array2, function(one, two) {
return {
name: one.name,
value: one.value,
name_compare: two.name,
value_compare: two.value
};
});
正如您所說的,功能就是問題。
每個對象需要兩個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;
}
試試這個,我確定您真正想要的是什么,但是我只是將答案基於您想要的輸出
<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.