Javascript 基于其他阵列限制检查阵列的最有效方法

Javascript 基于其他阵列限制检查阵列的最有效方法,javascript,arrays,Javascript,Arrays,我有以下数组集,我想通过以下数组检查哪个数组满足条件:必须包含、可选包含、必须包含 每个数组必须包含必须包含的字母。 数组不应包含任何必须包含的项。 可选_include中的值可以是must_include上的附加值,但不是must。 选项并不有趣,因为一个数组永远不会因为这段信息而失败:如果它没有所有这些元素,它就可以了,如果它有,它也可以 因此,您只需检查includes和notincludes,为此,您可以使用each和includes数组方法: 让我的arr=[[a',c',d',b'

我有以下数组集,我想通过以下数组检查哪个数组满足条件:必须包含、可选包含、必须包含

每个数组必须包含必须包含的字母。 数组不应包含任何必须包含的项。 可选_include中的值可以是must_include上的附加值,但不是must。
选项并不有趣,因为一个数组永远不会因为这段信息而失败:如果它没有所有这些元素,它就可以了,如果它有,它也可以

因此,您只需检查includes和notincludes,为此,您可以使用each和includes数组方法:

让我的arr=[[a',c',d',b',e'], ['a','e'], [a',c',f'], [a',c',b'], [a',b',d'], ['a'、'b'、'd'、'c'] 让我们必须包括=['a','b'] 让可选的包含=['c','d'] let must_not_include=['f'] 让结果=my_arr.filterarr=> 必须包含.everyval=>arr.includeval &&不得包含。everyval=>!包括瓦尔 ;
console.logresult 选项并不有趣,因为一个数组永远不会因为这段信息而失败:如果它没有所有这些元素,它就可以了,如果它有,它也可以

因此,您只需检查includes和notincludes,为此,您可以使用each和includes数组方法:

让我的arr=[[a',c',d',b',e'], ['a','e'], [a',c',f'], [a',c',b'], [a',b',d'], ['a'、'b'、'd'、'c'] 让我们必须包括=['a','b'] 让可选的包含=['c','d'] let must_not_include=['f'] 让结果=my_arr.filterarr=> 必须包含.everyval=>arr.includeval &&不得包含。everyval=>!包括瓦尔 ;
console.logresult 这将为以下语句提供一个带true或false的镜像数组:

变量my_arr=[[a',c',d',b',e'], ['a','e'], [a',c',f'], [a',c',b'], [a',b',d'], ['a','b','d','c']; var必须包含=['a','b']; 变量可选_include=['c','d']; var必须不包含=['f']; var mirror=my\u arr.mapitem=>{ must_inculde:must_inculde.reduceAc,element=>{acc=acc&&item.includeElement;return acc;},true, 可选_include:item.someelement=>可选_include.includeElement, 必须不包含:!item.someelement=>必须不包含.include元素 }; 控制台。logmirror;
.as console wrapper{max height:100%!important;top:0;}这将为语句提供一个带true或false的镜像数组:

变量my_arr=[[a',c',d',b',e'], ['a','e'], [a',c',f'], [a',c',b'], [a',b',d'], ['a','b','d','c']; var必须包含=['a','b']; 变量可选_include=['c','d']; var必须不包含=['f']; var mirror=my\u arr.mapitem=>{ must_inculde:must_inculde.reduceAc,element=>{acc=acc&&item.includeElement;return acc;},true, 可选_include:item.someelement=>可选_include.includeElement, 必须不包含:!item.someelement=>必须不包含.include元素 }; 控制台。logmirror;
.作为控制台包装{max height:100%!important;top:0;}如果完全省略可选的包含数组,会不会有任何功能上的差异?我不确定我是否理解您的意思,您的意思是如果可选的包含根本不存在?好的,我明白了,很抱歉耽搁了。当我想到它时,可选的包含确实是不必要的。如果完全省略可选的包含数组,会有什么功能上的区别吗?我不确定我是否理解你的意思,你的意思是如果可选的包含根本不存在吗?好的,我明白了,抱歉耽搁了。当我想到它时,可选的包含确实是不必要的。如果必须包含和必须不包含首先转换为集合,这可能会有n log n时间复杂度。然后,您可以使用Set.prototype.has,而不是使用each,它对每个调用执行线性搜索,它可能具有Olog n复杂性,如果不是O1的话,这里有一个JSFIDLE-。它当然没有trincot的解决方案那么优雅,但随着阵列规模的增长,它的效率会更高。如果必须包含和必须不包含先转换为集合,那么它的时间复杂度可能会达到n log n。然后,您可以使用Set.prototype.has,而不是使用each,它对每个调用执行线性搜索,它可能具有Olog n复杂性,如果不是O1的话,这里有一个JSFIDLE-。它当然没有trincot的解决方案那么优雅,但随着阵列规模的增长,它的效率会更高
    my_arr = [['a', 'c', 'd', 'b', 'e'],
              ['a', 'e'],
              ['a', 'c', 'f'],
              ['a', 'c', 'b'],
              ['a', 'b', 'd'],
              ['a', 'b', 'd', 'c']]
    
    must_inculde = ['a', 'b']
    optional_include = ['c', 'd']
    must_not_include = ['f']