Twitter API返回的ID是64位整数,例如276403573577891842。我想通过比较它们的ID来查看一个Tweet是否比另一个Tweet更新。
有没有一种比较两个64位整数的聪明方法,以查看仅支持32位整数的JavaScript中哪个更大?
最佳答案
假设API返回的字符串随后被解析为int,则有两种方法可以做到这一点-拆分方法和填充方法;
分裂。
这里的想法是将数据拆分为环境可以处理的大小。最大的32位数字是0xFFFFFFFF
或4294967295
。现在4294967295..toString().length === 10
。因此,所有str长度
function compare(a,b){
var aa = [0,0,0], ba = [0,0,0], i = 3;
while (a.length) aa[--i] = parseInt(a.slice(-9)), a = a.slice(0,-9);
i = 3;
while (b.length) ba[--i] = parseInt(b.slice(-9)), b = b.slice(0,-9);
if (aa[0] === ba[0]){
if (aa[1] === ba[1]) {
if (aa[2] === ba[2]) return 0;
else if (aa[2] > ba[2]) return 1;
return -1;
} else if (aa[1] > ba[1]) return 1;
return -1;
} else if (aa[0] > ba[0]) return 1;
return -1;
}
// a > b: 1, a = b: 0, a < b: -1
垫。
这次的想法是进行字符串比较,但是要做到这一点,我们必须首先确保(字符串)数字的长度相同;即用0填充它们。这次
'18446744073709551615'.length === 20
所以function pad(str, len) { // Your fav. padding fn
var pre = '0';
len = len - str.length;
while (len > 0) {
if (len & 1) str = pre + str;
len >>= 1;
pre += pre;
}
return str;
};
a = pad('276403573577891842',20);
b = pad('50',20);
现在您可以正常使用
a === b, a < b, a > b
(除非您使用的是字符串而不是int)。