0

我正在使用以下代码来检测数组中的唯一数字。

// Array
var sortBp = [ 700, 500, 500, 501, 600];


// Find Unique Numbers
Array.prototype.unique = function(){
    var bpAllArrays = this;
    var uniqueArrays = [];
    for(var i=bpAllArrays.length;i--;){
        var uniqueArray = bpAllArrays[i];  
        if($.inArray( uniqueArray, uniqueArrays )===-1){
            uniqueArrays.unshift(uniqueArray);
        }
    }
    return uniqueArrays;
}

// Append Only Unique Numbers
$.each(sortBp.unique(), function(index, value) {
    $("body").append(value);
});

这段代码工作正常。这是工作小提琴:http: //jsfiddle.net/ScPbe/

但我想添加另一个功能来检测:

如果数组中存在非常下一个数字,则删除较高的数字并仅附加较低的数字。

示例: [ 500, 501 ] 在这种情况下,我只想将 500 视为唯一编号而不是 501

所以最终结果应该类似于:

[ 700, 500, 600]

我怎样才能做到这一点?

4

2 回答 2

0

最后,我想出了以下代码。它检查数组中的当前值是否比上一个值大 1

这是小提琴:http: //jsfiddle.net/ScPbe/5/

   // Array
    var sortBp = [ 700, 500, 500, 501, 600, 601, 610,612];

    // Find Unique Numbers
    Array.prototype.unique = function(){
        var bpAllArrays = this;
        var uniqueArrays = [];
        for(var i=bpAllArrays.length;i--;){
            var uniqueArray = bpAllArrays[i];  
            if($.inArray( uniqueArray, uniqueArrays )===-1){
                uniqueArrays.unshift(uniqueArray);
            }
        }
        return uniqueArrays;
    }

    // Append Only Unique Numbers
    var arr = sortBp.unique();
    $.each(arr, function(index, value) {
        // Chect if Current Value > Prev by 1
        var prev = arr[index - 1];
        if (value - prev !== 1 ) {
             $('body').append(" "+value);
        }
    });
于 2012-08-26T17:24:55.667 回答
0

假设双精度值一个接一个地出现(不能出现在数组中的任何位置),这个解决方案会简单得多:

var sortBp = [ 700, 500, 500, 501, 600, 900, 900, 901];

for (var cur, last, i=0; i<sortBp.length; i++) {
    cur = sortBp[i];
    if (cur === last || cur === last + 1)
        continue;
    $('body').append(" "+cur);
    last = cur;
}

jQuery.each

var last;
$.each(sortBp, function(i, cur) {
    if (cur === last || cur === last + 1)
        return;
    $('body').append(" "+cur);
    last = cur;
});

使用 es5 的优雅解决方案.reduce(可能需要填充):

var display = [];
sortBp.reduce(function(last, cur) {
    if (cur === last || cur === last+1)
        return last;
    display.push(cur);
    return cur;
}, undefined);
$('body').append(display.join(" "));
于 2012-08-26T19:26:37.070 回答