子数组在数组中重复的次数 - JavaScript

Number of times sub-array is repeated in array - JavaScript

我有一个子数组,我试图找到它在主数组中重复的次数。

我已经到了可以确定它是否是子数组但无法进一步确定的地步。关于我如何在 JavaScript 中做到这一点的任何想法。

    function isSubArray(main_array, sub_array)
    {
        var i, j;
        for (i=0,j=0; i<main_array.length && j<sub_array.length;) 
        {
           if (main_array[i] !== sub_array[j]) 
           {
              ++i;
           }
           else if (main_array[i] === sub_array[j])
           {
              ++i; ++j;
           }
        }
        if(j == sub_array.length)
        {
           return true;
        }
        else
        {
           return false;
         }
     }

示例:

数组 = 1,2,3,4,5,1,2,3 sub_array = 1,2,3

sub_array在主数组中重复2次

1) Find the position of the first occurrence of the sub array in the main array.
2) slice() off that bit of the main array.
3) repeat until you find no more occurrences of the sub array in the main array.
4) Count how many times you had to do what.

细节留给提问者练习:-)

这是我为获得您所需的解决方案而制作的动态函数,

我取了两个不同的数组并返回了两个动态的重复计数。

var array = [1,2,3,4,5,1,2,3];
var array1 = [1,2,3,4,5,1,2,3,5,9,1,2,3];
var sub_array = [1,2,3];

function getRepeatedCount(array,sub_array)
{
    var count = 0;
    for(i = 0; i < array.length; i++  )
    {
        // console.log((array.slice(i,i + sub_array.length)) === sub_array)
        var repeated = ((array.slice(i,i + sub_array.length)).length==sub_array.length && (array.slice(i,i + sub_array.length)).every(function(v,i) { return v === sub_array[i]}))
        if(repeated)
        {
            count += 1;
        }
    }
    return count;
}
console.log("Array1",array, "Sub Array", sub_array, "Repeated count -> ",getRepeatedCount(array,sub_array));
console.log("Array1",array1, "Sub Array", sub_array, "Repeated count -> ",getRepeatedCount(array1,sub_array));

请运行以上片段

程序:

我创建了一个函数,它将主数组切成等于子数组长度的块(部分),并将小数组的每个块与子数组进行比较。

如果块(部分)等于 sub_array,则 count 变量在函数中递增 并返回。

HERE IS A WORKING DEMO

因此,我将函数动态化,以便您可以使用不同的数组和 sub_arrays.

多次调用它