用下划线填充数组间隙

时间:2014-09-18 15:00:42

标签: javascript arrays underscore.js

使用underscorejs,我如何填补数组中的空白。例如:

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

4 个答案:

答案 0 :(得分: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;
    }, []);
}

答案 1 :(得分: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;
}

但我确信会有更短的时间。

答案 2 :(得分: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;(如果不是1还填写第一位),您可以删除fillGaps([3,6,7,22])并设置['...',3,'...',6,7,'...',22]

答案 3 :(得分: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]="..";
}