Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/419.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 检查数组是否包含偏移量正确的数组_Javascript_Arrays - Fatal编程技术网

Javascript 检查数组是否包含偏移量正确的数组

Javascript 检查数组是否包含偏移量正确的数组,javascript,arrays,Javascript,Arrays,我有数组要比较,一个有4个值,另一个有3个值。其中一些可以是空的,例如: [1,2,3] [null,1,2,3] -> should return true [1,2,3,null] -> should return true [1,null,2,3] -> should return true [1,2,2,3] -> should return false [null,null,null,null] -> should return true [1, nul

我有数组要比较,一个有4个值,另一个有3个值。其中一些可以是空的,例如:

[1,2,3]

[null,1,2,3] -> should return true
[1,2,3,null] -> should return true
[1,null,2,3] -> should return true
[1,2,2,3] -> should return false
[null,null,null,null] -> should return true
[1, null, 3, 2] -> should return true
事实上,null同时作为1,2,3工作,这是一个通用值,用于定义“Youcan go”

我不知道如何在JavaScript中实现这一点,但我已经尝试过了:

let shouldDisplay=colors.every(函数(元素){
返回元素?所需颜色。包括(元素):true;
});
有没有可能做到这一点?我可以用函数做一些蹩脚的检查,但这并不好


谢谢你

一种简单的方法是使用join()和indexOf()。请参见以下示例:

[1,2,3]

[null,1,2,3] -> should return true
[1,2,3,null] -> should return true
[1,null,2,3] -> should return true
[1,2,2,3] -> should return false
[null,null,null,null] -> should return true
[1, null, 3, 2] -> should return true
让aOriginalArray=[1,2,3];
让arrayToCompare=[null,1,2,3]
让Isofset=arrayToCompare.join(“”).indexOf(aOriginalArray.join(“”))>-1;

控制台日志(isOffset)您可以通过迭代数组来完成:

功能检查(数组、模式){
//模式中的下一个索引
设指数=0
for(数组常量){
if(elem==pattern[index++]| | elem==null){
如果(索引>=pattern.length)
返回真值
}否则{
//不匹配,重置模式的索引
索引=0
}
}
返回错误
}
log(检查([1,2,null],[1,2,3])//true
log(检查([1,2,4,null],[1,2,3])//false

如果我理解正确,
null
值就像一个通配符,因此应该可以工作–虽然不是很优雅,但可能会有所改进

const element  = [1, 2, 3];

function compare(a, b) {
  let k = 0;
  for (let i = 0; i < b.length && k < 3; i++) {
    if (b[i] === null || b[i] === a[k]) {
      k++;
    // this is needed for the `[null, 1, 2, 3]` scenario
    } else if (b[i] === a[0]) {
      k = 1;
    } else {
      k = 0;
    }
  }

  return k === 3
当然,它可以处理任何元素序列,例如:

console.log(compare(["cc", "22", "fe"], [null, "22", "fe", null]))
编辑: 根据注释,仍然有一个结果是错误的,<代码> [1,NULL,2, 3 ] < /代码>:这是因为上面的代码只考虑一个可能的路径,所以如果我们已经在一个序列的中间(<代码> 1,NULL <代码> >),代码期望序列的以下项目(<代码> 3 < /代码>),其中,应该理解
null,2,3
仍然有效

我试图对上面的代码进行一些调整,结果如下:

function compare(a, b) {
  let last = b[0];
  let k = 0;
  for (let i = 1; i < 4 && k < 3; i++) {
    if (b[i] === a[k] || b[i] === null) {
      last = b[i];
      k++;
    } else if (b[i] === a[k + 1] && (last === null || last === a[k])) {
      last = b[i];
      k+=2;
    } else {
      return false;
    }
  }
  return k === 3
}
功能比较(a、b){
设last=b[0];
设k=0;
for(设i=1;i<4&&k<3;i++){
if(b[i]==a[k]| | b[i]==null){
last=b[i];
k++;
}else如果(b[i]==a[k+1]&&(last==null | | last==a[k])){
last=b[i];
k+=2;
}否则{
返回false;
}
}
返回k==3
}
这将保存解析的最后一个项目,并查看序列中的下一个项目:通过这些信息,可以更好地确定序列(包括通配符)是否在数组中。 这次我硬编码了循环的编号(3和4),但它也应该像以前一样工作


让我知道是否还有其他边缘情况!

[1,null,3,2]>应该返回true
这是什么原因?我不明白
[1,null,2,3]>应该返回false
[1,null,3,2]>应该返回true
之间的区别。如果
[1,null,2,3],请更清楚一些->应该返回false
那么为什么
[1,null,3,2]->应该返回true
我们不太清楚,请更精确一点我猜OP需要循环比较[1,null,3,2]如果是循环会导致1,2,3,null,但在我的例子中,wierdnull充当通配符。例如,基于数组
[1,2,3]
响应
[1,null,2,3]
应该可以工作,因为数组可能是
[1,1,2,3]
Ah,你完全正确!我将尝试用一个应该反映这一点的代码更新我的答案。我实际上不了解null在第二个数组中的用法。你想删除它们,然后进行比较或将它们映射到一个值吗?null用作通配符,这可能是当时的每个值