首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >组合json对象并保留重复键

组合json对象并保留重复键
EN

Stack Overflow用户
提问于 2016-02-09 16:04:23
回答 2查看 1.2K关注 0票数 1

我想组合两个包含json对象的数组,但是通过在键前面加上一些文本来保留重复的键。在下面的示例中,来自对象的数据是json2覆盖对象json1的,因为它们具有相同的键,但是我也希望保留来自第一个对象的数据。谢谢。

代码语言:javascript
运行
复制
var json1 = [
  {
    "Column1": "json1",
    "Column2": "json1",
  },
  {
    "Column1": "json1",
    "Column2": "json1",
  }
];
var json2 = [
  {
    "Column1": "json2",
    "Column2": "json2",
  },
  {
    "Column1": "json2",
    "Column2": "json2",
  }
];

console.log(angular.extend(json1, json2));

正在回归

代码语言:javascript
运行
复制
[
  {
    "Column1": "json2",
    "Column2": "json2",
  },
  {
    "Column1": "json2",
    "Column2": "json2",
  }
];

但我想

代码语言:javascript
运行
复制
[
  {
    "json1Column1": "json1",
    "json1Column2": "json1",
    "json2Column1": "json2",
    "json2Column2": "json2",
  },
  {
    "json1Column1": "json1",
    "json1Column2": "json1",
    "json2Column1": "json2",
    "json2Column2": "json2",
  }
];
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-02-09 16:44:56

我唯一能想到的就是创建一个函数来向对象添加前缀:

代码语言:javascript
运行
复制
function addPrefix(target, prefix){
    var newObj = false;
    if(target.constructor === Array){
        newObj = [];
        for(var i = 0 ; i< target.length; i++){
            item = target[i];
            var itemObj = {}; 
            for(var key in item){
                itemObj[prefix+key] = item[key]; 
            }
            newObj.push(itemObj);         
        }       
    }else{
        newObj = {};
        for(var key in target){
                newObj[prefix+key] = target[key]; 
        }
    }
     return newObj;
}

在避免使用angular.extend之后,它不支持深度属性复制。这就是为什么第二个对象的属性被复制到第一个对象中的原因。您需要的是angular.merge,所以代码将在实现之前的函数之后进行:

代码语言:javascript
运行
复制
var nJson1=addPrefix(json1,"json1");
var nJson2=addPrefix(json2,"json2");
var merged = angular.merge({},nJson1,nJson2);
票数 2
EN

Stack Overflow用户

发布于 2016-02-09 16:24:59

对键和项进行迭代的建议。

代码语言:javascript
运行
复制
var obj1 = [{ Column1: "json11", Column2: "json11", }, { Column1: "json12", Column2: "json12", }],
    obj2 = [{ Column1: "json21", Column2: "json21", }, { Column1: "json22", Column2: "json22", }],
    result = function (data) {
        var r = [];
        Object.keys(data).forEach(function (k) {
            data[k].forEach(function (a, i) {
                r[i] = r[i] || {};
                Object.keys(a).forEach(function (l) {
                    r[i][k + l] = a[l];
                });
            });
        });
        return r;
    }({ json1: obj1, json2: obj2 });

document.write('<pre>' + JSON.stringify(result, 0, 4) + '</pre>');

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35296614

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档