Javascript 如何在JS中从数组中删除一个子集?
假设我有一个数组,比如:Javascript 如何在JS中从数组中删除一个子集?,javascript,arrays,Javascript,Arrays,假设我有一个数组,比如:[1,1,2,2,3,3,4,5] 我想删除这个元素数组[1,2,3,4,5] 所以最后我想留下[1,2,3] 我尝试过使用下面的方法,但它会从主数组中删除元素的所有副本 myArray = myArray.filter( function( el ) { return !toRemove.includes( el ); } ); 您可以使用和 让arr=[1,1,2,2,3,3,4,5] 让remove=[1,3,2,4,5]。排序((a,b)=>a-b) 让o
[1,1,2,2,3,3,4,5]
我想删除这个元素数组
[1,2,3,4,5]
所以最后我想留下
[1,2,3]
我尝试过使用下面的方法,但它会从主数组中删除元素的所有副本
myArray = myArray.filter( function( el ) {
return !toRemove.includes( el );
} );
您可以使用和
让arr=[1,1,2,2,3,3,4,5]
让remove=[1,3,2,4,5]。排序((a,b)=>a-b)
让op=arr.sort((a,b)=>a-b).filter(e=>(remove.includes(e)?(remove.shift(),false):true))
console.log(op)
一个解决方案是在要删除的元素数组上循环,并且对于每个元素,删除输入数组上找到的第一个元素:
const input=[1,1,2,2,3,3,4,5];
常量removeItems=(输入,项)=>
{
//制作一个副本,不改变输入。
让clonedInput=input.slice();
//搜索并删除项目。
items.forEach(x=>
{
设i=clonedInput.findIndex(y=>y==x);
如果(i>=0)克隆输入拼接(i,1);
});
返回克隆输入;
}
日志(删除项(输入[1,2,3,4,5]);
log(removitems(输入[1,2]);
日志(removitems(输入[1,99,44,5])代码>您可以获得一个映射图
并通过检查计数和减少计数(如果找到)来计算值和过滤
var数组=[1,1,2,2,3,3,4,5],
删除=[1,2,3,4,5],
map=remove.reduce((m,v)=>m.set(v,(m.get(v)| | 0)+1),新map),
result=array.filter(v=>!map.get(v)| |!map.set(v,map.get(v)-1));
控制台日志(结果)代码>这里有一种方法可以使用过滤器
,索引
和拼接
const input=[1,1,2,2,3,3,4,5];
函数removeSubset(arr,子集){
常量排除=[…子集];
返回arr.filter(x=>{
const idx=exclude.indexOf(x);
如果(idx>=0){
不包括。拼接(idx,1);
返回false;
}
返回true;
});
}
log(removeSubset(输入[1,2,3,4,5])代码>两个数组是否总是排序?创建一个对象,该对象将第一个数组值作为键,该值的数量作为值,对于第二个数组,从第一个数组的每个键中减去1array@MarkMeyer不,不一定排序。“我想删除这个元素数组”您的意思是从原始数组中删除元素,还是返回一个仅包含中未包含的元素的新数组以删除?是myArray=myArray.filter()
故意重新定义myArray
,作为返回新数组的.filter()
的结果吗?要删除的元素数组在哪里?什么是只想删除元素[1,2]
?这现在只在删除数组排序的情况下起作用,这就是为什么我在评论中问到它的原因。是的,这似乎是在不增加二次复杂性的情况下做到这一点的最合理的方法。