Javascript 用下划线填充数组间隙

Javascript 用下划线填充数组间隙,javascript,arrays,underscore.js,Javascript,Arrays,Underscore.js,使用下划线,如何填补数组中的空白。例如: fillGaps([1,2,3,6,7,22,23,24]) => [1,2,3,'...',6,7,'...',22,23,24] 您可以这样做: function fillGaps(arr) { var result = []; var previous = 0; _.each(arr, function(p) { if (p > previous + 1) { result.push('...')

使用下划线,如何填补数组中的空白。例如:

fillGaps([1,2,3,6,7,22,23,24]) => [1,2,3,'...',6,7,'...',22,23,24]
您可以这样做:

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;
}
但我确信还有更短的。

警报(fillGaps([1,2,3,6,7,22,23,24]);
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;
}
函数填充间隙(arr){ var l=阵列长度; var out=[]; var thisel; var lastel=null; 对于(VARI=0;ilastel+1)out.push(“…”); 向外推(蓟); 拉塞尔=提塞尔; } 返回; }

您可以删除
lastel=null&
并设置
var lastel=1fillGaps([3,6,7,22])
返回
['…',3'…',6,7'…',22]
(如果不是1,也填充第一位)

我的看法如下:

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

使用inArray方法查找数组中缺少的元素。这里将返回数组中的最后一个元素

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]="..";
}
var数组1=[1,2,4,7];
var array2=[];
对于(var i=0;j=0)
阵列2[i]=i+1;
else array2[i]=”;
}

我不认为下划线添加了任何有用的东西来解决这个问题。简单地迭代数组并进行比较。我想象你可以通过分区然后加入之类的方式做一些聪明的事情。但不是。有时候最好保持简单;)在数组长度的帮助下,最后一个元素将像这样被捕获<代码>阵列1[阵列1.长度-1]
function fillGaps(arr) {
    return arr.reduce(function(result, v, i, arr) {
        return result.push(v), v < arr[i+1] - 1 ? result.push('...') : false, result;
    }, []);
}
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]="..";
}