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

double 値が次々に来る (配列内のどこにも現れない) と仮定すると、この解決策ははるかに簡単になります。

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(shimmed が必要な場合があります):

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 に答える