【问题标题】:Algorithm for sorting array of numbers into sets将数字数组排序为集合的算法
【发布时间】:2016-09-13 13:59:35
【问题描述】:

我有一个由 n 个对象组成的数组,如下所示:

[{'item1': 144},
 {'item2': 0},
 {'item3': 366},
 {'item4': 15},
 {'item6': 366},
 {'item7': 19},
 {'item8': 211},
 {'item9': 121}]

项目值为0-n。

我需要根据它们的值用不同的大小来表示这些项目。

为此,我最初的想法是将数组拼接成四个小数组:XL、L、M、S。

我不确定如何将数组排序为这 4 个集合。

【问题讨论】:

  • 你自己尝试过什么吗?
  • 请指定XL、L、M、S的范围
  • 我猜 L、M、S 会更容易一些。
  • @NinaScholz 怒不可遏
  • 请添加想要的结果。

标签: javascript sorting splice


【解决方案1】:

一个解决方案,使用第三方库underscore

var arr = [
   {'item1': 144},
   {'item2': 0},
   {'item3': 366},
   {'item4': 15},
   {'item5': 366},
   {'item6': 19},
   {'item7': 211},
   {'item8': 121}];

//max value n
var n = 400;

var result = _.groupBy(arr, function(item, i){ 
    var val = item["item" + (i + 1)];

    //group together values that are in the same quarter of the max value n
    if (val < n / 4) {
        return "S";
    } else if (val < n / 2) {
        return "M";
    } else if (val < 0.75 * n) {
        return "L";
    } else {
        return "XL";
    }
});

document.write(JSON.stringify(result));
&lt;script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore.js"&gt;&lt;/script&gt;

【讨论】:

    【解决方案2】:

    这是一个提案,其中包含 XL、L、M、S 的范围和一个用于分组结果的对象。

    var data = [{ 'item1': 144 }, { 'item2': 0 }, { 'item3': 366 }, { 'item4': 15 }, { 'item6': 366 }, { 'item7': 19 }, { 'item8': 211 }, { 'item9': 121 }],
        range = { XL: 400, L: 300, M: 200, S: 100 },
        keys = Object.keys(range).sort(function (a, b) { return range[a] - range[b]; }),
        groups = {};
    
    keys.forEach(function (k) { groups[k] = []; });
    
    data.forEach(function (a) {
        keys.some(function (k) {
            var key = Object.keys(a)[0];
            if (a[key] < range[k]) {
                groups[k].push(a);
                return true;
            }
        });
    });
    
    document.write('<pre>' + JSON.stringify(groups, 0, 4) + '</pre>');

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-27
      • 2012-08-27
      相关资源
      最近更新 更多