内部带有数组环路的数组滤波器



我有两个数组,一个带有书籍的现有标签,另一个带有按要添加的标签的用户输入值的搜索结果,我需要显示要添加的用户标签中尚不存在的标签:

tags = [{id:1, name:'x'},{id:2, name:'y'},{id:5, name:'z'}]
search = [{id:2, name:'y'},{id:5, name:'z'},{id:15, name:'s'}]

如何创建一个新数组,其中包含标签数组中不存在的搜索 ID 和其他数据?

这就是它最终为我工作的方式:

let newArray= search
.filter(({ id }) => {
return !tags.some(tag => {
return tag.id == id
})
})
.map(tag => {
return (
<Button
key={tag.id}
>
{tag.name}
</Button>
)
})

使用map获取tags array.object中的所有值 在search array上运行filter,如果上面创建的array中不存在该id,则返回它

var tags = [{id:1, name:'x'},{id:2, name:'y'},{id:5, name:'z'}]
var search = [{id:2, name:'y'},{id:5, name:'z'},{id:15, name:'s'}]
console.log(search.filter(({id,name})=>!tags.find(e=>e.id==id && e.name==name)))

我假设示例中所需的结果是{id:15},因为 15 是搜索中唯一不存在于标签中的值。

在这种情况下,您应该过滤搜索数组,而不是标签。条件是在标签中找不到搜索的内容。find方法在这里可以派上用场。

实际代码可能如下所示

let filtered = search.filter(searched =>
!tags.find(tagged => tagged.id === searched.id)
)

希望有帮助 - 卡洛斯

您可以使用过滤器和查找或一些在一行中执行此操作:

const tags = [{id:1},{id:2},{id:5}];
const search = [{id:2},{id:5},{id:15}];
const result1 = search.filter(({ id }) => !tags.some(tag => tag.id === id));
const result2 = search.filter(({ id }) => !tags.find(tag => tag.id === id));
console.log(result1, result2);

如果您使用旧版本的 JavaScript,下面是一个没有箭头函数和解构的版本:

const tags = [{id:1},{id:2},{id:5}];
const search = [{id:2},{id:5},{id:15}];
const result1 = search.filter(search => { return !tags.some(tag => { return tag.id === search.id; }); });
const result2 = search.filter(search => { return !tags.find(tag => { return tag.id === search.id; }); });
console.log(result1, result2);

我认为你想要的是:

search.filter(searchTag => tags.every(tag => tag.id != searchTag.id))

这就是它对我的工作方式:

let newArray= search
.filter(({ id }) => {
return !tags.some(tag => {
return tag.id == id
})
})
.map(tag => {
return (
<Button
key={tag.id}
>
{tag.name}
</Button>
)
})

最新更新