【问题标题】:Number of times sub-array is repeated in array - JavaScript子数组在数组中重复的次数 - JavaScript
【发布时间】:2017-07-03 13:09:02
【问题描述】:

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

我已经到了可以确定它是否是子数组但不能更进一步的地步。任何想法我如何在 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 次​​p>

【问题讨论】:

  • edit您的问题显示一些代码 - 至少显示示例输入和相应的所需输出。当您谈论重复的“子数组”时,您是在谈论嵌套数组,还是类似 [1,2,3,1,2,3] 重复 1,2,3 值?
  • 你能发布你到目前为止所做的事情吗?
  • 尝试发布数组(如果它不是非常大)以及你正在做什么来尝试获取子数组
  • 回答并发布了我对子数组函数@nnnnnn 的实现
  • 如果有重叠怎么办?如,[1,2,1][1,2,1,2,1,2,1,2,1] 中重复了多少次?

标签: javascript arrays sub-array


【解决方案1】:

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

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

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));

请运行上面的片段

程序:

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

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

HERE IS A WORKING DEMO

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

【讨论】:

  • @Mahima,你检查过答案了吗?
【解决方案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.

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

【讨论】:

    猜你喜欢
    • 2021-12-23
    • 2020-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-29
    • 2017-01-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多