且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

将处于10的倍数的相同范围内的数组值分组

更新时间:2023-08-23 08:12:04

这是一个通用函数:

function groupBy(ary, keyFunc) {
  var r = {};
  ary.forEach(function(x) {
    var y = keyFunc(x);
    r[y] = (r[y] || []).concat(x);
  });
  return Object.keys(r).map(function(y) {
    return r[y];
  });
}

// usage:

var arr = [2,4,7,11,25,608,65,99,101,504,606,607];

g = groupBy(arr, function(x) { return Math.floor(x / 10) });

document.write(JSON.stringify(g));

对于奖金问题,只需两次申请groupBy:

For your bonus question, just apply groupBy twice:

    function groupBy(ary, keyFunc) {
      var r = {};
      ary.forEach(function(x) {
        var y = keyFunc(x);
        r[y] = (r[y] || []).concat(x);
      });
      return Object.keys(r).map(function(y) {
        return r[y];
      });
    }





var arr = [2, 4, 11,'a3', 25, 7, 'j', 'bzy4'];
g = groupBy(arr, isNaN);

g = [].concat(
  groupBy(g[0], function(x) { return Math.floor(x / 10) }),
  [g[1].sort()]
);
          
document.write(JSON.stringify(g));