需要通过这种独特的阵列功能进行即兴创作

时间:2012-08-26 16:19:33

标签: javascript jquery arrays

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

// 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/

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

如果Array中存在Very Next Number,请删除更高的数字&只附加较低的数字。

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

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

[ 700, 500, 600]

我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:0)

最后,我提出了以下代码。它检查数组中的当前值是否大于prev值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);
        }
    });

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