2016-11-17 86 views
0

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

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

我想使用JavaScript

{first : [60 ,60 ,60] , second : [56 ,56] , third : [33]} 

放置此数组中这种形式的对象请任何帮助,将不胜感激。 THanks

+4

约'12'和'10'什么?请解释你想要达成的目标 – Rajesh

+0

请告诉我们你到目前为止的目标:) –

+0

'{first:arr.slice(0,3),second:...} ...? – deceze

回答

0

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

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);