Javascript 从对象数组中删除重复项
我有一个包含json对象的对象,名为 mainobject=Javascript 从对象数组中删除重复项,javascript,jquery,arrays,json,Javascript,Jquery,Arrays,Json,我有一个包含json对象的对象,名为 mainobject= Array[2] >0: object >Innerobject1 : Array[2] >0 : object Name : "Xavier" Dup : "B" >1 : object Name : "Gh" Dup : "B" >1: object >Innerobject2 : Array[2] >0 : object
Array[2]
>0: object
>Innerobject1 : Array[2]
>0 : object
Name : "Xavier"
Dup : "B"
>1 : object
Name : "Gh"
Dup : "B"
>1: object
>Innerobject2 : Array[2]
>0 : object
Name : "Cat"
Dup : "C"
>1 : object
Name : "Dog"
Dup : "D"
我需要将第一个对象(如果有)中已存在的“dup”设置为“”。我的预期输出为:
Array[2]
>0: object
>Innerobject1 : Array[2]
>0 : object
Name : "Xavier"
Dup : "B"
>1 : object
Name : "Gh"
Dup : ""
>1: object
>Innerobject2 : Array[2]
>0 : object
Name : "Cat"
Dup : "C"
>1 : object
Name : "Dog"
Dup : "D"
编辑:
json格式的对象:
:
我不太确定我是否正确解释了你发布的对象数组。但你可以这样做: 迭代数组,并在对象中存储要唯一的键。遇到多次错误时,请将新值设置为空字符串:
var seen = {};
mainobject.forEach(function(obj) {
if (seen[obj.Name]) {
obj.Name = "";
}
seen[obj.Name] = true;
});
您可能需要多次迭代,具体取决于嵌套数组的数量:
var seen = {};
mainobject.forEach(function(inner_arr) {
inner_arr.forEach(function(obj) {
if (seen[obj.Name]) {
obj.Name = "";
}
seen[obj.Name] = true;
});
});
使用
Array.forEach
和Object.keys
功能的解决方案:
var mainobject = JSON.parse('[{"Innerobject1":[{"Name" :"Xavier","Dup":"B"},{"Name" :"Gh","Dup":"B"}]},{"Innerobject2":[{"Name" : "Cat","Dup":"C"},{"Name":"Dog", "Dup":"D"}]}]');
mainobject.forEach(function(obj){
Object.keys(obj).forEach(function(k){
obj[k].forEach(function(o){
if (this["Dup"]) {
(this["Dup"].indexOf(o["Dup"]) !== -1)? o["Dup"] = "" : this["Dup"].push(o["Dup"]);
} else {
this["Dup"] = [o["Dup"]];
}
})
});
}, {});
console.log(JSON.stringify(mainobject, 0, 4));
console.log
输出:
[
{
"Innerobject1": [
{
"Name": "Xavier",
"Dup": "B"
},
{
"Name": "Gh",
"Dup": ""
}
]
},
{
"Innerobject2": [
{
"Name": "Cat",
"Dup": "C"
},
{
"Name": "Dog",
"Dup": "D"
}
]
}
]
您能否按照代码中显示的方式显示有效的对象
mainobject
结构?扩展mainobject后,这正是我在开发工具中使用document.write(JSON.stringify(yourObject))的方式
并获取JSON。@NenadVracar或更好的JSON.stringify(obj,null,4)
也可以获取缩进。
[
{
"Innerobject1": [
{
"Name": "Xavier",
"Dup": "B"
},
{
"Name": "Gh",
"Dup": ""
}
]
},
{
"Innerobject2": [
{
"Name": "Cat",
"Dup": "C"
},
{
"Name": "Dog",
"Dup": "D"
}
]
}
]