2016-04-27 5 views
1

Я хотел бы, чтобы вычислить общие сегменты в массивах, которые уже отсортированные:сегменты общих значений в отсортированных массивах

Рассмотрим следующие два массива:

var arr1 = ['a','b','c','d']; 
var arr2 = ['a','c','d']; 

Я хотел бы вернуться [ 'а '], [' b '], [' c ',' d ']

Это не типичное пересечение, поэтому сохранение порядка значений массива имеет решающее значение.

Есть ли простой способ сделать это с помощью подчеркивания?

+0

являются U не ищет '[ 'B'], [ 'а', 'C', 'D']'? –

+0

Не стандартное пересечение, порядок значений имеет значение :) –

+0

Есть ли правило, стоящее за группировкой? –

ответ

0

Предположительно это работает для вас, по крайней мере, с данными.

var arr1 = ['a', 'b', 'c', 'd'], 
 
    arr2 = ['a', 'c', 'd'], 
 
    arr3 = []; 
 

 
arr1.forEach(function (a, i) { 
 
    if (!i || this.next) { 
 
     arr3.push([a]); 
 
     if (a === arr2[this.index]) { 
 
      this.index++; 
 
     } 
 
     this.next = false; 
 
     return; 
 
    } 
 
    if (a < arr2[this.index]) { 
 
     arr3.push([a]); 
 
     this.next = true; 
 
     return; 
 
    } 
 
    if (a === arr2[this.index]) { 
 
     arr3[arr3.length - 1].push(a); 
 
     this.index++; 
 
    } 
 
}, { index: 0, next: false }); 
 

 
document.write('<pre>' + JSON.stringify(arr3, 0, 4) + '</pre>');

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