使用underscorejs,我如何填补数组中的空白。例如:
fillGaps([1,2,3,6,7,22,23,24]) => [1,2,3,'...',6,7,'...',22,23,24]
答案 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;
}
如果您希望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]="..";
}