合并 json 对象并保留重复的键
Combine json objects and keep duplicate keys
我想合并两个包含 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);
一个提案,其中一些迭代了键和项目。
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>');
相关文章:
- JSON保留n中的一行
- JSON不保留顺序
- asp.net Jquery.ajax保留JSON.分析意外字符错误
- 是用 JSON 保留的 tid 密钥
- 将两个或多个 JSON 对象数组合并为一个数组,保留唯一性
- JavaScript 全局不保留范围?创建自动完成 Web 服务 JSON 对象
- 如何在从 javascript 中的 json 对象中提取字符串时保留转义序列.(字符串实际上是正则表达式模式)
- 合并 json 对象并保留重复的键
- 在 JSON.parse() 之后保留属性属性(可写、可配置)
- 对 json 保留索引进行排序
- Regexp保留json字符串中的值
- 如何在onsenui中的多个ons模板页面中保留json对象
- 从JSON文件中获得的值保留在解析函数上;t被分配给全局变量
- Angular从JSON响应中存储数据,并保留双引号(%22)
- 将工作JavaScript对象序列化为仅保留属性的JSON
- 在JSON.parse()之后保留Backsplash
- 从JSON属性中删除,但保留它们的值
- 保留json对象数组的选定成员
- 是否保留JSON列表中元素的顺序
- 对 JSON 数据进行编码以保留 json 格式