我知道类似的问题已经发布,但他们似乎从来没有针对相同的问题。
我想从第一个数组(allItems)中删除包含在第二个数组(itemsToRemove)中的对象。
allItems = [{x:1, y:2}, {x:1, y:1}, {x:4, y:1}]
itemsToRemove = [{x:1, y:2}]
result = [{x:1, y:1}, {x:4, y:1}]我尝试了许多方法,但在find()条件下以某种方式失败了
const result = allItems.filter((itemFromAllItems ) => {
return !itemsToRemove.find( itemToRemove => {
return itemFromAllItems.x === itemToRemove.x && itemFromAllItems.y === itemToRemove.y
})
})发布于 2020-07-09 02:34:11
假设您的对象只有x和y值,这将会起作用。
var allItems = [{x:1, y:2}, {x:1, y:1}, {x:4, y:1}]
var itemsToRemove = [{x:1, y:2}]
var result = allItems.filter(e => !itemsToRemove.some(s => s.x === e.x && s.y === e.y));
console.log(result);
希望这能有所帮助
发布于 2020-07-09 02:56:48
如果你只是想过滤,你可以使用filter和some来获得你想要的数据,但是,如果你想从数组中直接删除对象,你可以使用下面的命令
allItems = [{x:1, y:2}, {x:1, y:1}, {x:4, y:1},{x:4, y:1},{x:4, y:1}]
itemsToRemove = [{x:1, y:2},{x:4, y:1}]
for(let i=0;i<allItems.length;i++){
o=allItems[i]
itemsToRemove.some(v=>{if(o.x==v.x &&o.y==v.y) allItems.splice(i,1),i--})
}
console.log(allItems)
发布于 2020-07-09 03:15:47
这将获取两个数组,比较这些值,然后生成一个新数组,其中只包含不匹配的结果。
<script>
allItems = [{x:1, y:2}, {x:1, y:1}, {x:4, y:1}];
itemsToRemove = [{x:1, y:2}]
result = [];
for(var i = 0; i < allItems.length; i++){
for(var j = 0; j < itemsToRemove.length; j++){
if(JSON.stringify(allItems[i]) !== JSON.stringify(itemsToRemove[j])){
result.push(allItems[i]);
}
}
}
console.log(result);
</script>https://stackoverflow.com/questions/62801331
复制相似问题