var a1 = [{path:'home'},{path:'index'}]
var a2 =[{path:'home'},{path:'index'},{path:'delpage'}]
两个数组循环,删除不同的对象元素
期望a2 = [{path:'home'},{path:'index'}]
var a1 = [{path:'home'},{path:'index'}]
var a2 =[{path:'home'},{path:'index'},{path:'delpage'}]
两个数组循环,删除不同的对象元素
期望a2 = [{path:'home'},{path:'index'}]
@tenggouwa 的解法虽然可行,但是效率不高,为n^2
,我对javascript不熟,这里只提供思路,可以先对两个数组分别进行排序,排序算法有很多比n^2
效率高的,排序完之后对两个数组遍历一遍即可(复杂度为n
),所以两个加起来的复杂度是小于n^2
的,尤其是n
很大的时候。遍历的策略大致是两个指针分别指向排完序的数组的起始位置,然后比较,如果相等,则结果添加此元素,如果不等,则移动其中排序靠前的指针(也就是解引用后值较小的,如果按照从小到大排序的话),如此遍历即可。代码你可以自己实现,应该不复杂。
maybe,这样可以满足你的需求么
function getSameElement(a1, a2) {
if(a1.length < a2.length) {
[a1, a2] = [a2, a1];
}
return a2.filter(item => JSON.stringify(a1).includes(JSON.stringify(item)));
}
[...a1,...a2].reduce((obj,v)=>{
let key=JSON.stringify(v);
if(obj.check.includes(key)){
obj.result.push(v)
}else{
obj.check.push(key);
}
return obj;
},{result:[],check:[]}).result
function filterArr(arr1,arr2) {
return arr2.filter(v => {
return a1.some(i => {
return v.path == i.path
})
})
}
console.log(filterArr(a1,a2)) //[{path:'home'},{path:'index'}]
10 回答11.2k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.7k 阅读✓ 已解决
3 回答1.5k 阅读✓ 已解决
3 回答2.3k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决