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

时间:2017-02-15 02:42:40

标签: javascript arrays sub-array

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

我已经到了可以确定它是否是子阵列但无法继续进行的程度。任何想法我如何在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;
         }
     }

示例:

array = 1,2,3,4,5,1,2,3 sub_array = 1,2,3

sub_array在主阵列中重复2次

2 个答案:

答案 0 :(得分:0)

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.

详细信息留给提问者练习: - )

答案 1 :(得分:0)

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

我已经使用了两个不同的数组并返回了两个动态的重复计数。

&#13;
&#13;
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));
&#13;
&#13;
&#13;

请跑上面的SNIPPET

<强>步骤:

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

如果chunk(part)等于sub_array,则函数中的 count变量递增并返回。

HERE IS A WORKING DEMO

因此,我将函数设置为动态,以便您可以使用不同的数组和子数组调用它多次。