gpt4 book ai didi

javascript - 项目的过滤器列表如何取决于另一个列表

转载 作者:行者123 更新时间:2023-12-04 07:56:54 26 4
gpt4 key购买 nike

我有一组脚本“列表”和一组选定的用户“用户”,
每个用户可以有几个这样的脚本。
如何过滤“列表”脚本数组以仅保留其中包含正确语句的脚本:

  • 如果至少用户列表中的某个人没有列表“列表”中的脚本,我们将显示此脚本
  • 如果所有用户都有这样的脚本,我们不显示它

  • 例子
    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/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com