对数组值进行分组

Grouping array values

本文关键字:数组      更新时间:2023-09-26

我有一个已经排序的数组。假设我的排序数组是

 [60 , 60 ,60, 56 , 56 ,45 , 33 , 12, 10]

我想用javascript

把这个数组放到这个形式的对象中
 {first : [60 ,60 ,60] , second : [56 ,56] , third : [33]}

请任何帮助将不胜感激。由于

您可以使用嵌套的方法使用两个循环,一个用于所需的键,另一个用于包含数字的数组的长度。

var numbers = [60, 60, 60, 56, 56, 45, 33, 12, 10],
    object = {},
    i = 0; j = 0,
    keys = ['first', 'second', 'third'],
    last = numbers[0];
while (i < keys.length) {
    object[keys[i]] = object[keys[i]] || [];
    while (j < numbers.length && numbers[j] === last) {
        object[keys[i]].push(numbers[j]);
        j++;
    }
    last = numbers[j];
    i++;
}
console.log(object);

风格更紧凑的提案。

function groupByTop(items, object) {
    var last = numbers[0]
        j = 0;
    return function (k) {
        object[k] = object[k] || [];
        while (j < items.length && items[j] === last) {
            object[k].push(items[j]);
            j++;
        }
        last = items[j];
    };
}
var numbers = [60, 60, 60, 56, 56, 45, 33, 12, 10],
    result = {};
['first', 'second', 'third'].forEach(groupByTop(numbers, result));
console.log(result);