2014-09-18 3 views
1

Использование underscorejs, как заполнить пробелы в массиве. Например:Заполнение пробелов в матрицах с подчеркиванием

fillGaps([1,2,3,6,7,22,23,24]) => [1,2,3,'...',6,7,'...',22,23,24] 
+0

Я не думаю, что подчеркивание добавляет что-нибудь полезное для решения этой проблемы. Просто перебирайте массив и сравните его. –

+0

Я предполагал, что вы можете сделать что-то умное, разделяя, а затем присоединяясь или тому подобное. Но нет. –

+0

Иногда лучше держать его простым;) –

ответ

0

Вы можете сделать это:

function fillGaps(arr) { 
    var result = []; 
    var previous = 0; 
    _.each(arr, function(p) { 
    if (p > previous + 1) { 
     result.push('...') 
    } 
    result.push(p); 
    previous = p; 
    }); 
    return result; 
} 

Но я уверен, что короче.

0
alert(fillGaps([1,2,3,6,7,22,23,24])); 

function fillGaps(arr) { 
    var l=arr.length; 
    var out=[]; 
    var thisel; 
    var lastel=null; 
    for(var i=0;i<l;i++) { 
     thisel=arr[i]; 
     if(lastel!=null && thisel>lastel+1) out.push("..."); 
     out.push(thisel); 
     lastel=thisel; 
    } 
    return out; 
} 

FIDDLE

Вы можете удалить lastel!=null && и установить var lastel=1; в начале, если вы хотите fillGaps([3,6,7,22]) вернуть ['...',3,'...',6,7,'...',22] (также заполнение первое место, если не 1)

2

Вот мой взгляд на него:

function fillGaps(arr) { 
    for (var i = arr.length - 2; i > -1; i--) { 
     if (arr[i] < arr[i+1] - 1) { 
      arr.splice(i+1, 0, '...'); 
     } 
    } 
    return arr; 
} 

Это изменяет массив на месте.

В качестве альтернативы:

function fillGaps(arr) { 
    var result = []; 
    for (var i = 0; i < arr.length - 1; i++) { 
     result.push(arr[i]); 
     if (arr[i] < arr[i+1] - 1) { 
      result.push('...'); 
     } 
    } 
    return result; 
} 

Или, если вы хотите, чтобы сделать код более читаемым и злоупотребление .reduce и оператор запятая:

function fillGaps(arr) { 
    return arr.reduce(function(result, v, i, arr) { 
     return result.push(v), v < arr[i+1] - 1 ? result.push('...') : false, result; 
    }, []); 
} 
0

метод использования inArray найти недостающий элемент в массиве. Здесь ._last() вернет последний элемент в массиве.

var array1 = [1,2,4,7]; 
var array2 = []; 
for(var i = 0;j < _.last(array1) ; i++){ 
    if($.inArray(i+1, array1)>=0) 
     array2[i]= i+1; 
    else array2[i]=".."; 
} 
+0

С помощью длины массива последний элемент будет записан следующим образом. 'Массив1 [array1.length-1]' –

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