我正在使用以下代码来检测数组中的唯一数字。
// 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]
我怎样才能做到这一点?
答案 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(" "));