gpt4 book ai didi

javascript - 如何从包含嵌套对象的数组中删除重复项

转载 作者:行者123 更新时间:2023-11-29 10:49:01 25 4
gpt4 key购买 nike

我有一个嵌套对象数组(我用它来填充我的树),如下所示......

var obj1= {
text: "TreeRoot",
items: [ {
text: "subgroup1" ,
items: [ {
text: "subgroup2",
items: [ {
text: "subgroup3",
items: [ {
text: "subgroup4",
items: [ {
text: "subgroup5"
}]
}]
}]
}]
}]
};

var obj2 = {
text: "TreeRoot",
items: [ {
text: "subgroup1" ,
items: [ {
text: "subgroup2",
items: [ {
text: "subgroup3",
items: [ {
text: "subgroup4",
items: [ {
text: "subgroup5"
}]
}]
}]
}]
}]
};


var obj3= {
text: "TreeRoot",
items: [ {
text: "subgroup1" ,
items: [ {
text: "subgroup2"
}]
}]
}]
};

var finalArray=[];
finalArray.push(obj1);
finalArray.push(obj2);
finalArray.push(obj3);

现在我需要使用文本从我的最终数组中删除重复的对象(即我应该从我的数组中删除 obj2)...

这是我试过的..

var arr = {};

for ( var i=0; i < finalPath.length; i++ )
arr[finalArray[i]['text']] = finalArray[i];

finalArray= new Array();
for ( key in arr )
finalArray.push(arr[key]);

谁能告诉我最好的方法?

编辑:

我认为下面的解决方案有效,但还没有完全测试......

var arr = {};

for ( var i=0; i < finalArray.length; i++ ){
if(finalArray[i].items){
for(var j=0;j<finalArray[i].items.length;j++){
arr[finalArray[i].items[j]['text']] = finalArray[i];
}
}else{
arr[finalArray[i]['text']] = finalArray[i];
}
}


finalArray= new Array();
for ( key in arr )
finalArray.push(arr[key])

谢谢,巴拉尼

最佳答案

JSON 似乎使用起来非常简单,并使您的代码保持干净,但可能会使用大量处理。

还有另一种方法可以解决您的问题,您可以创建一个递归函数来遍历数组并比较每个分支。

function areEqual(a, b) {
if( (a.items && !b.items) || (!a.items && b.items) ) return false;
else if(!a.items && !b.items) return a.text == b.text ? true : false;
else return (a.text == b.text) ? areEqual(a.items[0], b.items[0]) : false;
}

此代码适用于您提供的数据,但如果您想测试其他值(不仅是文本),您可能需要调整函数

areEqual(obj1, obj2) : true
areEqual(obj1, obj3) : false

编辑:

这是该函数的简化版本,如果您需要比较多个元素(不仅是文本)则更好

function areEqual(a, b) {
var conditions = a.text == b.text /* && a.another_var == b.another_var */;

if( typeof(a.items) != typeof(b.items) ) return false;
if(a.items && b.items && conditions) return areEqual(a.items[0], b.items[0]);
return conditions;
}

关于javascript - 如何从包含嵌套对象的数组中删除重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13957239/

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