Javascript 如何返回一个列表,其中包含由另一个数组过滤的一个数组中的数据

Javascript 如何返回一个列表,其中包含由另一个数组过滤的一个数组中的数据,javascript,arrays,object,Javascript,Arrays,Object,我从两个不同的API接收两个数组。其中一个有完整的“项目”列表,另一个是其中一些“项目”的列表。在现实生活中,它可能像“我需要打包的所有物品中已经打包的物品”。因此,我需要返回已打包项目的列表,以及所有剩余项目的列表(完整列表减去已打包列表) 预计将有两个HTML UL:一个包含已打包的项目,另一个包含需要打包的剩余项目。我会将打包项目列表转换为简单的ID列表。然后,您可以非常简单地筛选所有项 const packedItemIds = packedItems.map(item => it

我从两个不同的API接收两个数组。其中一个有完整的“项目”列表,另一个是其中一些“项目”的列表。在现实生活中,它可能像“我需要打包的所有物品中已经打包的物品”。因此,我需要返回已打包项目的列表,以及所有剩余项目的列表(完整列表减去已打包列表)


预计将有两个HTML UL:一个包含已打包的项目,另一个包含需要打包的剩余项目。

我会将打包项目列表转换为简单的ID列表。然后,您可以非常简单地筛选
所有项

const packedItemIds = packedItems.map(item => item.id);
const remainingItems = allItems.filter(item => {
  return !packedItemIds.some(id => id === item.id);
});

因此,您要做的是根据id是否包含在打包项列表中,将数组划分为两个组。我建议编写一个基于任意谓词对数组进行分区的函数,并向其传递一个谓词,该谓词确定被测试元素在特定列表中是否具有id。可能是这样的:

const partition=(fn,xs)=>xs.reduce(
([yes,no],x)=>fn(x)?[[…yes,x],no]:[yes,[…no,x]],
[ [], [] ]
)
常量hasId=(xs)=>({id})=>
xs.some({id:pid})=>id==pid)
常量分区项=(是)=>(可能)=>
分区(hasId(是),可能)
const allItems=[{“color”:{“inside”:“grey”,“outside”:“brown”},“id”:1,“name”:“Skateboard”},{“color”:“inside”:“multicloor”,“outside”:“black”},“id”:2,“name”:“TV”},{“color”:“inside”:“grey”,“outside”:“blue”},“id”:3,“name”:“Car:null,“外部”:“白色”},“id”:5,“名称”:“T恤”},{“颜色”:{“内部”:“黑色”},“外部”:“黑色”},“id”:6,“名称”:“头盔”},{“颜色”:{“内部”:null,“外部”:“蓝色”},“id”:7,“名称”:“自行车”},{“颜色”:{“内部”:“白色”},“外部”:“白色”},“id”:8,“名称”:“干衣机”}]
const packedItems=[{“颜色”:{“内部”:“灰色”,“外部”:“蓝色”},id:3,“名称”:“汽车”},{“颜色”:{“内部”:null,“外部”:“蓝色”},id:7,“名称”:“自行车”}]
控制台日志(
分部项目(包装项目)(联合项目)

)
工作正常,谢谢@musicfuel
const packedItemIds = packedItems.map(item => item.id);
const remainingItems = allItems.filter(item => {
  return !packedItemIds.some(id => id === item.id);
});