我有n个n对象数组,如下所示:
[{'item1': 144},
{'item2': 0},
{'item3': 366},
{'item4': 15},
{'item6': 366},
{'item7': 19},
{'item8': 211},
{'item9': 121}]
项目值为0-n。
我需要根据它们的值来表示具有不同大小的这些项目。
要做到这一点,我最初的想法是将数组拼接成四个小数组:XL,L,M,S。
我不确定如何将数组分类为这4组。
答案 0 :(得分:0)
使用第三方库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));
&#13;
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore.js"></script>
&#13;
答案 1 :(得分:0)
这是一个提案,其范围为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>');