javascript 查找[object,object]中的重复元素

请问一下下面的两个数组如何才能找到相关的位置
情况一
图片描述

const array1=[{from:0,to:1},{from:1,to:2},{from:1,to:2},{from:2,to:3}]

上面的array1数组如何才能快速找到重复元素{from:1,to:2}的位置。

情况二
图片描述

const array2=[{from:0,to:1},{from:1,to:2},{from:2,to:3},{from:3,to:2}]

上面的array2数组如何找到from与to互相颠倒{from:2,to:3},{from:3,to:2}的元素位置

原生javascript怎么样才能得到期待的结果。lodash中有什么便捷的方法吗?

阅读 4.5k
4 个回答

相对简单的结构,可以通过一定的算法,把每个元素计算成一个字符串来作为比较因子,比如

const list = array.map(t => ({
    key: `from_${t.from}:to_$(t.to}`,
    data: t
}));

如果不在乎是 from 还是 to,在只乎连接了两个点,可以去掉字符串中的 fromto,比如

   // ...
   key: [t.from, t.to].sort().join("_")

注意这里先进行了排序,是为了保证顺序一致,方便做一致性比较(比如 from 1 to 2 和 from 2 to 1 都会生成相同的 key:1_2)。

剩下的就是根据 key 去重再重新组合 data 就好了

第一个数组去重问题,转化成普通数组.indexOf()方法找出重复元素

var arr = [];
for(let i=array1.length;i--){
    let res = array1[i];
    arr.push(`${res.from}_${res.to}`)
    }
var new_arr = [];
for(let i=arr.length;;i--){
    let res = arr[i];
    new_arr.indexOf(res)==-1 ? new_arr.push(res) : console.log(res);
    }

第二个先把元素的from和to相加再去重;

var new_arr = [];
for(let i=array2.length;;i--){
    let res = array2[i];
    new_arr.push(res.from+res.to);
}
...去重

如果对效率没有特殊要求的话,两层循环就可以解决问题。两两比较数组中的元素,直到这两个元素满足你的要求(from 和 to属性分别相等或交叉相等),或遍历结束。

你这个数组怎么来的?如果是动态数组,那在往数组里push数据的时候,就直接做检查比较好。如果里边存在相同数据,就不要push了

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题