Javascript:子数组是否返回false

Javascript:子数组是否返回false,javascript,html,arrays,Javascript,Html,Arrays,我正在尝试运行一个名为IsSubArray的程序。有两个输入文本框。一个称为大数组,另一个称为子数组。任务是检查子数组中的值是否连续匹配大数组中的数字。例如: 数组1:1,3,6,5,4 数组2:1,3,6-为true,因为1,3与数组1匹配 数组2:1,6-false,因为在1之后,数组1中的3不是6。它应该连续匹配 数组2:6,5,4-对 数组2:5,4,7-错误,因为数组1中4后面没有数字7。 但我要说的是最后一句话。我不知道为什么。我刚刚在学习算法 提前感谢:) 函数issubaray

我正在尝试运行一个名为IsSubArray的程序。有两个输入文本框。一个称为大数组,另一个称为子数组。任务是检查子数组中的值是否连续匹配大数组中的数字。例如:

数组1:1,3,6,5,4

数组2:1,3,6-为true,因为1,3与数组1匹配

数组2:1,6-false,因为在1之后,数组1中的3不是6。它应该连续匹配

数组2:6,5,4-对

数组2:5,4,7-错误,因为数组1中4后面没有数字7。 但我要说的是最后一句话。我不知道为什么。我刚刚在学习算法

提前感谢:)

函数issubaray(){
inputArray1=document.getElementById(“InputExt1”).value.split(“,”);
inputArray2=document.getElementById(“InputExt2”).value.split(“,”);
var k=0;
var msg=false;
对于(j=0;j0&&msg==false)
打破
//如果(j>0&&k==0){
//msg=假;
//中断;
//}
对于(i=0;i






代码似乎过于复杂。一般做法是:

  • 在数组中找到子数组的第一个元素以获得起点
  • 验证子阵列中的每个元素是否与阵列中的以下元素匹配(在起点处)
  • 重复此操作,直到没有要检查的元素
实施示例:

函数包含(arr,子数组){
const first=子阵列[0];
//标记为回路,以便我们可以轻松地跳到那里
//找到比较序列的“下一个”起点
外部:for(设i=arr.indexOf(第一);i>-1;i=arr.indexOf(第一,i+1)){
//当我们找到一个起点时,比较子数组中的其余元素
对于(设j=1;j
检查子数组中的值是否连续匹配大数组中的数字

通过使用
Array.join()
String.search()
,可以简化问题:

const arr=[1,3,6,5,4]
/*试验*/
log(issubray(arr[1,3,6])//true
log(issubray(arr[1,6])//false
log(issubray(arr[6,5,4])//true
console.log(isSubArray(arr[5,4,7])//false
console.log(issubray(arr[54])//false
函数Isubaray(原始,猜测){
常量a=原始的.join()
const b=猜测。连接()
返回a.search(b)>=0

}
是。它是false,因为在数组1中,1后面的下一个数字是3,而不是6。而在数组2中,它是1,6。1,3与1,6不匹配。因此它是错误的。啊,连续的意思是“连续的”,而不仅仅是“之后”,当然,我的错误:)你的实现的可能重复在多个方面存在缺陷。除了您发现的问题(这可能与您没有迭代最后一个元素(
j
)有关),当存在部分匹配时,您的实现也存在得太早:
false:LongArray:1,3,6,1,3,4,ShortArray:1,3,4
Wow。谢谢你能给我解释一下“indexOf”是怎么工作的吗?另外,是否可以使用输入文本框而不是硬编码值?
indexOf
返回数组中元素的索引。有关更多信息,请参阅。“另外,是否可以使用输入文本框而不是硬编码值?”当然,这只是一个示例。在我的示例中,函数
包含
,它不关心它接收的数组是如何创建的。我更新了我的答案,试图解释您的代码不起作用的原因。非常感谢。我现在明白了。虽然使用输入文本框似乎不起作用。我在html中的按钮onclick函数中遇到错误。
issubaray([1,2,3],[12])=>true
@FelixKling抱歉,我错过了。谢谢你的提醒,我已经更新了代码。