今天早上看到微博上喵大 @onevcat 在吐槽这段代码
https://github.com/ParsePlatform/parse-server/blob/master/RestWrite.js#L704-L715
// Returns a string that's usable as an object id.
// Probably unique. Good enough? Probably!
function newObjectId() {
  var chars = ('ABCDEFGHIJKLMNOPQRSTUVWXYZ' +
               'abcdefghijklmnopqrstuvwxyz' +
               '0123456789');
  var objectId = '';
  for (var i = 0; i < 10; ++i) {
    objectId += chars[Math.floor(Math.random() * chars.length)];
  }
  return objectId;
}
如果大家来写这一段代码应该会怎样写?
|  |      1int64ago      2016-01-31 12:38:46 +08:00 简单粗暴有效…… 不过现在貌似都是直接用 MongoDB 的 ObjectId 吧 | 
|  |      2sox      2016-01-31 12:54:14 +08:00 | 
|  |      3zsx      2016-01-31 12:55:12 +08:00 | 
|  |      4whimsySun      2016-01-31 13:13:56 +08:00 大致看了下,这个只是一个兼容原 api 的 api 服务端代码 | 
|  |      5vincentxue      2016-01-31 14:14:26 +08:00 via iPhone 不必太在意,这个不是真正的,真正的是用 Go 写的。 | 
|  |      6pynix      2016-01-31 14:35:30 +08:00 简单。。。 | 
|  |      79999999999999999      2016-01-31 14:39:28 +08:00 via Android 人家都说了 只是 nodejs 的实现而已。 | 
|      8sjtlqy      2016-01-31 16:52:10 +08:00 fb 的不都这样吗,快速开发实现. hackthon 的 | 
|  |      9wuchizhitu1988      2016-01-31 17:16:20 +08:00 uuid | 
|  |      10matsuijurina      2016-01-31 17:33:28 +08:00 ruby 一行就可以了吧。  [*('a'..'z'),*('A'..'Z'),*('0'..'9')].shuffle[0,9].join | 
|  |      11plqws      2016-01-31 17:41:20 +08:00 他吐槽的是碰撞几率吧,而且插入之前不会去验证一下是不是已经存在了吗 | 
|  |      12bingwenshi      2016-01-31 17:54:04 +08:00 @plqws 这种验证应该调用这个方法的地方,自己去验证吧 | 
|  |      13cloudzhou      2016-01-31 20:38:49 +08:00 其实我觉得这个没有什么问题。 如果要强制 unique ,需要在数据库做一下主键限制 | 
|  |      14plqws      2016-01-31 23:12:40 +08:00 @bingwenshi 我就是这个意思…所以认为那个人注释的槽点很奇怪 | 
|      15jetbillwin      2016-02-01 01:16:16 +08:00 本来就不是 node ,生产环境以前从 Rails 转到 Go 了 | 
|  |      17beneo      2016-02-01 10:36:48 +08:00 看了一圈,不知道这个是干嘛的,谁能科普一下 |