作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一组脚本“列表”和一组选定的用户“用户”,
每个用户可以有几个这样的脚本。
如何过滤“列表”脚本数组以仅保留其中包含正确语句的脚本:
let list = [{name: 'script1', id:'1'}, {name: 'script2',id:'2'},{name: 'script3',id:'3'}]
let users = [
{name: 'user1', scripts:[{name: 'script1',id:'1'}]},
{name: 'user2', scripts:[{name: 'script1',id:'1'},{name: 'script2',id:'2'}]}
]
let result = list.filter(...) //=> let list = [{name: 'script2'},{name: 'script3'}]
我的尝试看起来很糟糕
let result = list.filter(item => {
return users.filter(user => {
return user.scripts.some(el => {
return el.id !== item.id
})
})
})
最佳答案
当您想要查找完全缺少搜索项的数组时,您会犯一个常见的错误,即寻找不等于搜索项的内容。它们不是等价的,因为即使一个元素不等于搜索项,其他元素也可能。
使用 !users.every(...)
检查至少一位用户缺少的内容。
let list = [{name: 'script1', id:'1'}, {name: 'script2',id:'2'},{name: 'script3',id:'3'}]
let users = [
{name: 'user1', scripts:[{name: 'script1',id:'1'}]},
{name: 'user2', scripts:[{name: 'script1',id:'1'},{name: 'script2',id:'2'}]}
]
let result = list.filter(({id}) =>
!users.every(({scripts}) => scripts.some(s => s.id == id)));
console.log(result);
关于javascript - 项目的过滤器列表如何取决于另一个列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66657549/
我是一名优秀的程序员,十分优秀!