gpt4 book ai didi

javascript - 合并 json 对象并保留重复键

转载 作者:行者123 更新时间:2023-11-30 12:05:41 26 4
gpt4 key购买 nike

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

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

回来了

[
{
"Column1": "json2",
"Column2": "json2",
},
{
"Column1": "json2",
"Column2": "json2",
}
];

但是我想要

[
{
"json1Column1": "json1",
"json1Column2": "json1",
"json2Column1": "json2",
"json2Column2": "json2",
},
{
"json1Column1": "json1",
"json1Column2": "json1",
"json2Column1": "json2",
"json2Column2": "json2",
}
];

最佳答案

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

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,因此您的代码将在实现之前的功能之后:

var nJson1=addPrefix(json1,"json1");
var nJson2=addPrefix(json2,"json2");
var merged = angular.merge({},nJson1,nJson2);

关于javascript - 合并 json 对象并保留重复键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35296614/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com