2017-02-15 3 views
1

У меня есть подматрица, и я пытаюсь найти количество повторений в основном массиве.Количество повторений массива в массиве - 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

Пожалуйста, отредактируйте ваш вопрос, чтобы показать какой-то код - при минимальном значении введите пример ввода и соответствующий желаемый результат. Когда вы говорите о повторном «суб-массиве», говорите ли вы о вложенных массивах или что-то вроде '[1,2,3,1,2,3]', повторяя значения «1,2,3»? – nnnnnn

+0

Не могли бы вы изложить, что вы сделали до сих пор? – Dana

+0

попытайтесь опубликовать массив (если он не слишком большой) и что вы делаете, чтобы попытаться получить subarray –

ответ

0

Вот динамический е сделанный мной, чтобы получить требуемое решение,

Я взял два разных массива и возвратил повторное количество динамических.

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.

+0

@ Махима, вы проверили ответ? – Sravan

+0

да, это хорошо работает. благодаря – Mahima

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. 

Детали в качестве упражнения для вопрошающего :-)

Смежные вопросы