Javascript合并并重命名Json对象

Javascript合并并重命名Json对象,javascript,json,Javascript,Json,这里有一个简单的问题:我想合并两个Json对象,同时重命名第二个 第一个阵列(obj1): 第二个阵列(obj2): 预期结果: [ { "name":"Metric 1", // Obj1 "value":118181851, // Obj1 "name_compare":"Metric 1", // Obj2 "value_compare":148748, // Obj2 }, { "name":"Me

这里有一个简单的问题:我想合并两个Json对象,同时重命名第二个

第一个阵列(obj1):

第二个阵列(obj2):

预期结果:

[  
   {  
      "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 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(这很有意义,因为我在输出[I]上迭代了两次),但是我如何才能进入并只更改key->value呢?

正如您所说,函数就是问题所在

每个对象需要两个循环,如下所示:

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;
}

我建议您定义一个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
    };
});

试试这个,我确定你真正想要的是什么,但我只是根据你想要的结果来回答


//第一阵列(obj1)
var_obj1=[
{  
“名称”:“指标1”,
“价值”:33731487,
},
{  
“名称”:“指标2”,
“价值”:11252893,
}
];
//第二个阵列(obj2):
var_obj2=[
{  
“名称”:“指标1”,
“价值”:118181851,
},
{  
“名称”:“指标2”,
“价值”:15151,
},
{  
“名称”:“指标3”,
“价值”:123,
},
];
函数jsonRename(obj1、obj2){
var out=[];
var键={};
var-ctr=0;
var-indx=0;
用于(obj1中的v){
if(typeof(obj1[v].name)!=“未定义”){
var n=obj1[v]。名称;
if(类型(键[n])=“未定义”){
向外推(obj1[v]);
键[n]=输出长度-1;
}
用于(obj2中的v1){
试一试{
如果(n==obj2[v1].name){
ctr++;
out[keys[n][“name_compare”+ctr]=obj2[v1]。name;
out[keys[n][“value_compare”+ctr]=obj2[v1]。值;
}
}捕获(e){}
}
}
}
返回;
}
var out=jsonRename(_obj1,_obj2);

你能提供小提琴或弹琴吗?为什么是-1?我认为这是一个相当体面的问题!
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;
}
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
    };
});